2012-04-03 63 views
11

我試圖通過關聯的用戶名來查找包含在belongs_to關係中的記錄,但它不起作用。rails mongoid條件通過關聯查找

文章屬於用戶 用戶有很多文章

Article.where(user_id: someid)工作正常,但我想使用的用戶名作爲存儲在用戶表引用。

Article.includes(:user).where(:username => "erebus") 
Article.includes(:user).where("user.username" => "erebus") 

我也有identity_map_enabled: true

Article.includes(:user).inclusions返回的關係細節

不行的話,那我不理解?

回答

27

您必須記住,mongodb中沒有連接。在關係數據庫中,includes形成連接查詢,您可以使用查詢中兩個表中的列。但是由於沒有mongodb中的連接,所以不可能。

在mongoid中,includes只保存了一堆數據庫調用。它將相關記錄提取並存儲在身份映射中以便快速檢索,但仍然在查詢時,一個查詢只能處理一個集合。

如果您需要根據用戶名的文章,我建議以下解決方法:

user_ids = User.where(username: 'erebus').only(:_id).map(&:_id) 
articles = Article.where(:user_id.in => user_ids) 
+0

如果我們從其他方式獲取數據並且當前集合中實際上沒有數組,但是其他數據一個? – Laurent 2016-05-31 14:46:20

+0

哦,是的,我知道答案:你不能。 – Laurent 2016-05-31 14:51:07

13

你可以把它從什麼rubish短一點建議:

user_ids = User.where(username: 'erebus').pluck(:id) 
articles = Article.where(:user_id.in => user_ids) 

或者一個內膽:

articles = Article.where(:user_id.in => User.where(username: 'erebus').pluck(:id)) 
+0

愛一個沒有地圖功能的班輪 – HoosierCoder 2017-01-17 01:12:48