2010-06-12 72 views
0

兩種型號(Rails 2.3.8):rails named_scope急於加載問題

用戶;用戶名&禁用屬性;用戶has_one:個人資料 個人資料;全名&隱藏屬性

我想創建一個名爲_scope消除殘疾= 1和隱藏= 1用戶配置文件。此外,雖然User模型通常與Profile模型結合使用,但我希望靈活性能夠使用:include =>:profile語法來指定。

我有以下的用戶named_scope:

named_scope :visible, { 
    :joins => "INNER JOIN profiles ON users.id=profiles.user_id", 
    :conditions => ["users.disabled = ? AND profiles.hidden = ?", false, false] 
    } 

可正常工作時,只是用戶參考模型:

>> User.visible.map(&:username).flatten 
=> ["user a", "user b", "user c", "user d"] 

然而,當我嘗試包括檔案模式:

User.visible(:include=> :profiles).profile.map(&:full_name).flatten 

我收到一條錯誤消息:

NoMethodError: undefined method `profile' for #<User:0x1030bc828> 

我可以通過這種方式跨越模型集合邊界嗎?

回答

0

要訪問userprofile,你必須使用類似

@user = User.visible(:include => :profiles) 
@user.first.profile 

或者,如果你想要的是所有full_name S,我相信你應該這樣做

# untested 
User.visible(:include=> :profiles).map(&:profile).collect{ |p| p.full_name } 

但可能有更好的辦法......它看起來不漂亮= P