Ruby on rails 元编程实例方法-语法有问题吗?

Ruby on rails 元编程实例方法-语法有问题吗?,ruby-on-rails,ruby,metaprogramming,Ruby On Rails,Ruby,Metaprogramming,对于水果对象,我希望能够明确地询问它是否是橙色,例如,通过水果对象的name属性。当我叫水果的时候。用名字(“橙色”)找到你。你是橙色的吗?我猜错了。我做错了什么 NAMES = ['orange', 'pear'] Fruit.class_eval do NAMES.each do |n| define_method "is_#{n}?" do self.name == Fruit.find_by_name(n) end

对于水果对象,我希望能够明确地询问它是否是橙色,例如,通过水果对象的name属性。当我叫水果的时候。用名字(“橙色”)找到你。你是橙色的吗?我猜错了。我做错了什么

NAMES = ['orange', 'pear']

  Fruit.class_eval do
    NAMES.each do |n|
        define_method "is_#{n}?" do
          self.name == Fruit.find_by_name(n)
        end
    end
  end
对我来说似乎是错的。你不该检查一下吗

self.name == Fruit.find_by_name(n)
?

您确实应该使用instance_eval


另外,我认为将您的方法命名为橙色会更为ruby?我想您应该使用的不是is_orange?

而是您可以轻松地验证您的方法是否正在被调用。因此,出错的不是元编程,而是方法中的逻辑。检查你的ActiveRecord(?)thinkingok,instance_eval对于所问的问题是有意义的,但是仅仅在类中定义这些方法难道不是更有意义吗?
self.name == n