11

在我的一个模型中,我有这样的代码:

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 散列保存对象,而无需在控制器中强制散列。

同样的事情说三遍感觉不太好。有没有更好的方法来创建这样的相同方法?

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 回答