2012-02-28 71 views
0

我有一個簡單的模型:ActiveRecord的關聯屬性的查詢方法

class Project < ActiveRecord::Base 
    belongs_to :user 

class User < ActiveRecord::Base 
    has_many :projects 

項目有幾個屬性,如:日期,:姓名,併爲這些屬性我有屬性可供查詢方法對我說:

project.date? 
project.name? 

但是我沒有:

project.user? 

相反,我有:

project.user_id? 

瞥一眼代碼顯示這是因爲實際的「屬性」是user_id,這就是屬性查詢方法的目的?對於關係來說,查詢方法也是這個想法的邏輯延伸。

常見的做法是什麼?看來我們有一些粗略的等價物可供選擇:

project.user.present? 
project.user.blank? 
project.user.nil? 

或者僅使用{relation}_id?方法和停止抱怨?

回答

1

爲什麼不自己定義一個項目方法來滿足您期望的API?

class Project < ActiveRecord::Base 

    def user? 
    true if user.present? 
    end 
end 

我想在Ruby中的最佳實踐,並坦言在所有的編程是明確指定的接口,如果你認爲用戶?是做這件事的最佳方式,那麼我就說去做吧。

+0

當然,對於除了剛好基於關聯的屬性之外的所有屬性,都可以看到生成的存在檢查簡短方法,這似乎很奇怪。如果AR自動處理所有這些,爲什麼區分? – 2012-02-29 15:33:15