【发布时间】:2012-07-24 05:32:12
【问题描述】:
在我的 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
以这种方式写它们我也看不出有什么好处。
【问题讨论】:
标签: ruby-on-rails ruby oop model-view-controller