2

在我的控制器的创建和更新操作中,我有很多这样的语句:

@company.set_preference(:api_username, params[:company]['api_username']) if params[:company]['api_username']
@company.set_preference(:api_password, params[:company]['api_password']) if params[:company]['api_password']

我想知道我是否可以重构这些以使我的代码更干。我敏锐地意识到它们可能属于模型(re:胖模型和瘦控制器),但不知道该怎么做。有人可以启发我吗?

在此先感谢您的时间,

加夫

4

1 回答 1

8

这是@company.set_preference你试图避免的重复吗?或重复params[:company]..

如何向您的Company模型添加一个方法,例如:

def update_preferences(prefs)
  prefs.each_pair do |pref_name, value|
    set_preference(pref_name.to_sym, value)
  end
end

然后用

@company.update_preferences(params[:company])

您还可以添加检查以确保仅设置有效的首选项,例如

VALID_PREFERENCES = ['api_username', 'api_password']

def update_preferences(prefs)
  prefs.each_pair do |pref_name, value|
    set_preference(pref_name.to_sym, value) if VALID_PREFERENCES.include?(pref_name)
  end
end
于 2009-09-30T12:36:25.300 回答