我试图通过关联的用户名找到一条记录,该记录包含在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
返回关系细节
不起作用,我有什么不明白的?
您必须记住,mongodb中没有联接。在关系数据库中,includes
形成一个联接查询,您可以在查询中使用两个表中的列。然而,由于mongodb中缺少联接,所以不可能实现同样的连接。
在mongoid中,includes
只保存了一堆数据库调用。它获取并存储身份映射中的相关记录,以便快速检索,但在查询时,一个查询只能处理一个集合。
如果你需要基于用户名的文章,我建议你做以下工作:
user_ids = User.where(username: 'erebus').only(:_id).map(&:_id)
articles = Article.where(:user_id.in => user_ids)
您可以根据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))