Подтвердить что ты не робот

Создайте несколько одинаковых методов в 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 без принуждения хеша в моем контроллере.

Не очень приятно говорить то же самое три раза. Есть ли лучший способ создать идентичные методы, подобные этому?

4b9b3361

Ответ 1

%w(lendable free skill).each do |name|
  define_method "#{name}_category" do |i|
    set_category(i)
  end
end

Ответ 2

В качестве альтернативы, поскольку ваши методы ничего не делают, кроме вызова set_category, вы можете сохранить пару строк, просто наложив метод:

%w(lendable free skill).each do |name|
  alias_method "#{name}_category=", :set_category
end

Ответ 3

Вы можете использовать ключевое слово alias:

alias lendable_category= set_category 
alias free_category=     set_category 
alias skill_category=    set_category