rails mongoid标准通过关联找到

时间:2012-04-03 10:13:30

标签: ruby-on-rails ruby-on-rails-3 mongodb associations mongoid

我试图通过关联的用户名找到记录,该用户名包含在belongs_to关系中,但它无效。

文章属于用户 用户有很多文章

Article.where(user_id: someid)运行正常,但我想使用用户名作为参考,存储在Users表中。

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

我也有identity_map_enabled: true

Article.includes(:user).inclusions返回关系详情

不能工作,我不理解什么?

2 个答案:

答案 0 :(得分:28)

你必须记住mongodb中没有连接。在关系数据库中,includes形成连接查询,您可以使用查询中两个表中的列。然而,由于mongodb中没有连接,同样是不可能的。

在mongoid中,includes只保存了一堆数据库调用。它在身份映射中获取并存储相关记录以便快速检索,但在查询时,一个查询只能处理一个集合。

如果您需要基于用户名的文章,我建议您继续使用以下方法:

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

答案 1 :(得分:14)

你可以根据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))