在我的 Rails 应用程序中,创建业务时,我有一个包含以下字段的表单:
<%= check_box_tag(:default_company) %>
<%= label_tag(:default_company, "Set Company as Default") %>
本质上,当我创建业务时,如果他们选中此框,我需要它运行类似于以下代码的内容:
def set_default_company(company, user)
exists = DefaultCompany.find(user.id)
if exists
exists.update_attributes(company: company)
else
DefaultCompany.create(company: company, user: user)
end
end
在学习时,我通常会在我的控制器中做这些事情,但我正在尝试遵循最佳实践并使用胖模型、瘦控制器,所以我想使用这样的逻辑:
def create
@company = Company.new(params[:company])
if @company.save
if params[:default_company]
Company.set_default_company(@company.id, current_user.id,)
end
flash[:notice] = "Company was successfully created."
redirect_to @company
else
redirect_to new_company_path
end
end
这是我对使用类方法还是实例方法来调用set_default_company
. 他们似乎都可以工作,我看不出对其中一个有什么好处。
除了向我提供有关使用哪种方法的任何信息之外,如果有人可以向我展示将其作为类方法与实例方法编写的简要实现,它可能会让我更好地理解原因。
以下是我将如何编写它们:
def self.set_default_company(company, user)
# Logic here
end
def set_default_company(company, user)
# Logic here
end
以这种方式写它们我也没有看到任何好处。