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 に答える