首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails嵌套连接Activerecord with conditions

Rails嵌套连接Activerecord with conditions
EN

Stack Overflow用户
提问于 2014-08-04 11:35:51
回答 3查看 30.8K关注 0票数 25

我正在尝试编写一个带有条件的嵌套连接查询。

我现在的查询是:

代码语言:javascript
复制
Event.joins(:store => :retailer).where(store: {retailer: {id: 2}})

它输出以下SQL:

代码语言:javascript
复制
   SELECT "events".* FROM "events" INNER JOIN "stores" ON "stores"."id" = "events"."store_id" INNER JOIN "retailers" ON "retailers"."id" = "stores"."retailer_id" WHERE "store"."retailer_id" = '---
:id: 2
'

还有下面的错误:

代码语言:javascript
复制
SQLite3::SQLException: no such column: store.retailer_id: SELECT "events".* FROM "events" INNER JOIN "stores" ON "stores"."id" = "events"."store_id" INNER JOIN "retailers" ON "retailers"."id" = "stores"."retailer_id" WHERE "store"."retailer_id" = '---
:id: 2
'

它告诉我没有列store.retailer_id,但是,我可以运行以下查询,它将工作得很好:

代码语言:javascript
复制
Event.first.store.retailer_id
  Event Load (0.2ms)  SELECT  "events".* FROM "events"   ORDER BY "events"."id" ASC LIMIT 1
  Store Load (0.1ms)  SELECT  "stores".* FROM "stores"  WHERE "stores"."id" = ? LIMIT 1  [["id", 28958]]
=> 4
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-04 14:12:56

看起来你在这里不需要嵌套连接。尝试使用像这样的东西

代码语言:javascript
复制
Event.joins(:store).where(stores: {retailer_id: 2})

嵌套连接也应该使用stores

代码语言:javascript
复制
Event.joins(:store => :retailer).where(stores: {retailer: {id: 2}})
票数 37
EN

Stack Overflow用户

发布于 2014-11-12 15:20:53

有一种最简单的方法,而不是使用大括号:

代码语言:javascript
复制
Event.joins(:store => :retailer).where('stores.retailer_id => ?', 2)
票数 4
EN

Stack Overflow用户

发布于 2017-09-27 17:20:38

您应该能够使用以下语法访问retailers id

代码语言:javascript
复制
Event.joins(:store => :retailer).where('retailers.id' => 2)

ps。在Rails 5上进行了测试

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25111426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档