2011-02-06 47 views
0
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 

對於水果對象,我希望能夠明確地詢問它是否是橙色,例如,水果對象的名稱屬性。當我打電話給Fruit.find_by_name('orange')。is_orange?我弄錯了。我究竟做錯了什麼?元編程實例方法 - 語法錯誤?

+1

我懷疑你應該使用[`instance_eval`](http://ilikestuffblog.com/2009/01/09/fun-with-rubys-instance_eval-and-class_eval/) – meagar 2011-02-06 15:28:43

+0

你可以很容易地驗證你的方法正在被調用。因此,這不是錯誤的元編程,而是你的邏輯。檢查你的ActiveRecord(?)思考 – Phrogz 2011-02-06 15:34:16

回答

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

對我來說似乎是錯的。你不應該檢查

self.name == n 

??

而且你應該確實使用instance_eval。

另外,我認爲它會更像紅寶石般的命名你的方法橙色?而不是is_orange ?.