元编程 - 多种方法

时间:2011-01-24 03:55:18

标签: ruby-on-rails metaprogramming

这是我目前的代码:

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

答案 0 :(得分:2)

很难说,因为你没有说我们是什么课“在”。我猜我们在Item ,但我有点不清楚为什么你有item = nil

item = nil我认为是对你的实例变量@item使用相同名称的方法进行模糊处理。

另一种方法是调用上面定义的方法。

E.G

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