首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SQL语句转换为活动记录语法

将SQL语句转换为活动记录语法
EN

Stack Overflow用户
提问于 2015-02-09 16:24:15
回答 3查看 48关注 0票数 0

我在为以下Postgres查询找出活动记录语法时遇到了一些困难:

代码语言:javascript
复制
SELECT *
FROM tracks
JOIN displays on displays.track_id = tracks.id
JOIN users on displays.user_id = users.id
WHERE user_id = 1
  AND displays.display is true
  AND tracks.likes_count > 200

上面的查询工作正常,现在我尝试将其转换为activerecord的语法,但得到了错误:

语法错误:错误:语法错误在“t”行1:...ck_id=“轨道”。“id”在其中(displays.display不在),跟踪.

代码语言:javascript
复制
Track.joins(:users, :displays).where('displays.display is ?, tracks.likes_count > ?, users.id = ?', true, 200, 1)

似乎我对displays.display is True语句做错了什么,但是我尝试了几个变体,但都没有用。

我正在使用Activerecord-4.2.0。

我会感谢你的一些见解。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-09 20:31:55

看起来我实际上只是错过了ANDs....derp:

代码语言:javascript
复制
Track.joins(:users, :displays).where('displays.display = ? AND tracks.likes_count > ? AND users.id = ? ', true, 200, 1)

正如@Andrius指出的那样,更新也指出了Track.joins(:users,:displays)和Track.joins(:Displays=> :users)是两个不同的联接,我想使用前者。

票数 0
EN

Stack Overflow用户

发布于 2015-02-09 17:05:00

默认情况下,ActiveRecord不知道如何连接轨道和用户,因此请指示要通过显示进行连接:

代码语言:javascript
复制
Track.joins(:displays => :users).where('displays.display is true, tracks.likes_count > ?, users.id = ?', 200, 1)

希望我能记住语法:)

票数 0
EN

Stack Overflow用户

发布于 2015-02-09 17:36:42

我认为问题在于连接,您可以尝试如下:

代码语言:javascript
复制
Track.joins(displays: :users).where('displays.display = ?, tracks.likes_count > ?, users.id = ?', true, 200, 1)

您可以使用以下语法与第三个表进行连接:

表1.联接(table2::table3 3)

结果:

代码语言:javascript
复制
SELECT "table1".* 
 FROM "table1" 
 INNER JOIN "table2" ON "table2"."table_id" = "table1"."table1_id" 
 INNER JOIN "table3" ON "table3"."table2_id" = "table2"."table2_id"

Able3 ON“table3”,“table2_id”=“table2”,“table2_id”

您可以在这里更多地阅读ActiveRecord的联接方法:querying.html#joining-tables

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

https://stackoverflow.com/questions/28414417

复制
相关文章

相似问题

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