重构DRYness的控制器代码

时间:2009-09-30 12:22:36

标签: ruby-on-rails dry

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

@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:脂肪模型和瘦的控制器),但我不知道该怎么做。有人可以开导我吗?

提前感谢您的时间,

GAV株系

1 个答案:

答案 0 :(得分: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