Ответ 1
%w(lendable free skill).each do |name|
define_method "#{name}_category" do |i|
set_category(i)
end
end
В одной из моих моделей у меня есть такой код:
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 без принуждения хеша в моем контроллере.
Не очень приятно говорить то же самое три раза. Есть ли лучший способ создать идентичные методы, подобные этому?
%w(lendable free skill).each do |name|
define_method "#{name}_category" do |i|
set_category(i)
end
end
В качестве альтернативы, поскольку ваши методы ничего не делают, кроме вызова set_category
, вы можете сохранить пару строк, просто наложив метод:
%w(lendable free skill).each do |name|
alias_method "#{name}_category=", :set_category
end
Вы можете использовать ключевое слово alias
:
alias lendable_category= set_category
alias free_category= set_category
alias skill_category= set_category