2017-03-15 150 views
0

我正在開發一個項目,我有一個用戶,一個用戶有一個UserSetting。我想獲取User.user_setting.status =='active'的用戶。我在那一刻:根據關聯屬性獲取記錄

User.joins(:user_setting).where(:user_setting => {:status => 'active'}) 

,但它似乎沒有工作,我得到的錯誤

Unknown column 'user_setting.status' in 'where clause' 

如果有人能幫助我,我要去哪裏錯了,將不勝感激。

+0

啊,我當然可以。 UserSettings返回UserSettings(id:integer,status:string,user_id:integer,created_at:datetime,updated_at:datetime)' – user2320239

+1

'用戶'不應該是'User'?錯字?所以,在user.rb中你有'has_one:user_settings'?複數? – Ursus

+1

您錯誤地命名模型。用戶表應該由User模型管理,而不是由User模型管理,user_settings應該映射到UserSetting模型而不是UserSettings模型。對於Rails來說,模型名稱必須是* singular *,以便自動選擇正確的表格,而不是複數形式。解決這些問題,並看看是否有幫助。 – meagar

回答

1
User.joins(:user_setting).where(user_settings: { status: 'active' }) 

joins你應該使用協會名稱,而where子句中,你應該使用的數據庫表名(這是user_settings,不user_setting)。

編輯

如果不想接收所產生的集合中重複的條目,您可以使用GROUP BY條款:

User.joins(:user_setting) 
    .where(user_settings: { status: 'active' }) 
    .group('users.id') 

另一種選擇是使用includes代替joins

User.includes(:user_setting) 
    .where.not(user_settings: { id: nil }) 
    .where(user_settings: { status: 'active' }) 
+1

謝謝,當我被允許時,我會接受你的回答。 – user2320239

+0

我不知道Rails 5,但在以前的版本中,使用AR的'joins'方法將使用SQL'INNER JOIN',之後會在AR :: Relation中進行重複。使用'includes'&'references'代替 – MrYoshiji

+0

@MrYoshiji是的,在Rails 5 AFAICT中連接仍然會產生重複。我個人使用'includes'或'joins' +'group('users.id')' –

相關問題