11

私のモデルの1つに、次のようなコードがあります。

def lendable_category=(i)
  set_category(i)
end

def free_category=(i)
  set_category(i)
end

def skill_category=(i)
  set_category(i)
end

メソッドは私が追加した仮想パラメーターであるため、コントローラーでハッシュを強制することなく、paramsハッシュを使用してオブジェクトを保存できます。

同じことを3回言うのは気分が悪いです。このような同じメソッドを作成するためのより良い方法はありますか?

4

3 に答える 3

17
%w(lendable free skill).each do |name|
  define_method "#{name}_category" do |i|
    set_category(i)
  end
end
于 2013-01-10T12:34:18.187 に答える
16

または、メソッドは呼び出し以外のことをしていないので、メソッドのset_categoryエイリアスを作成するだけで数行節約できます。

%w(lendable free skill).each do |name|
  alias_method "#{name}_category=", :set_category
end
于 2013-01-10T13:26:37.903 に答える
4

alias次のキーワードを使用できます。

alias lendable_category= set_category 
alias free_category=     set_category 
alias skill_category=    set_category 
于 2013-01-10T14:23:36.690 に答える