Метапрограммирование - несколько методов - PullRequest
0 голосов
/ 24 января 2011

Вот мой текущий код:

  class << self
      NAMES.each do |item_name|
          item = nil
          define_method "#{item_name}" do
             item = find_by_name(item_name)
          end

          define_method "#{item_name}_id" do
              item.id
          end
      end
  end

Я получаю сообщение об ошибке при попытке вызвать Item.balloon_id, например, потому что он говорит, что не может вызвать nil для объекта Какой правильный код?

1 Ответ

2 голосов
/ 24 января 2011

Трудно сказать, потому что вы не говорите, в каком классе мы находимся. Я предполагаю, что мы находимся в Item , но мне немного непонятно, почему у вас item = nil

item = nil Я предполагаю, что запутывает метод с тем же именем для вашей переменной экземпляра @ item.

Еще один способ сделать это - вызвать метод, который вы определили выше.

1010 * например *

define_method "#{item_name}_id" do
  self.send(item_name).id
end
...