在我的一个模型中,我有这样的代码:
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散列保存对象,而不会强制控制器中的散列。
三次说同样的事并不好。是否有更好的方法来创建这样的相同方法?
答案 0 :(得分:16)
%w(lendable free skill).each do |name|
define_method "#{name}_category" do |i|
set_category(i)
end
end
答案 1 :(得分:15)
或者,由于您的方法除了调用set_category
之外没有做任何其他操作,您可以通过对方法进行别名来保存几行:
%w(lendable free skill).each do |name|
alias_method "#{name}_category=", :set_category
end
答案 2 :(得分:4)
您可以使用alias
关键字:
alias lendable_category= set_category
alias free_category= set_category
alias skill_category= set_category