在Ruby中创建多个相同的方法

时间:2013-01-10 12:28:48

标签: ruby-on-rails ruby

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

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 个答案:

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