2011-07-05 47 views
2

型號後爲has_many關係創建方法?

has_many :comments 
has_mant :tags 

def comments? 
    !self.comments.empty? 
end 

def tags? 
    !self.tags.empty? 
end 

要檢查的具體崗位有任何意見或標籤。我寫了一個實例方法評論?和標籤?這將根據帖子是否有評論和標籤返回真或假。

我想寫一個has_many關係的方法,它將提供方法'?'。

所以在將來如果我有10個has_many與post的關係比我不需要爲relation1 ?, relation2?寫10個方法。

任何想法。

回答

5

如果你想動態定義的方法,比如ActiveRecord做各種事情,你可以這樣做:

class Model 
    has_many :x 
    has_many :y 
    self.reflect_on_all_associations(:has_many).each do |association| 
    define_method "#{association.name}?" do 
     self.send(association.name).any? 
    end 
    end 
end 

這將創建方法:x?:y?。你可以把它放在一個模塊中,並將其包含到你需要的模型中。

編輯:any?相同!empty?

+0

謝謝你的代碼。你能告訴我如何在模塊中寫入它? –

相關問題