在我的控制器的创建和更新操作中,我有很多这样的语句:
@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株系
答案 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