【发布时间】:2018-02-27 20:40:47
【问题描述】:
我试图避免在 Rails 中对我的joins 进行字符串插值,因为我注意到将查询器链接在一起时灵活性降低了。
也就是我觉得joins(:table1)比joins('inner join table1 on table1.id = this_table.table1_id')灵活很多。
我想要完成的是:
FROM table1
INNER JOIN table2 on table2.id = table1.table2_id
LEFT JOIN table3 on table3.id = table2.table3_id
内联全部
但是,我不知道如何使用 Rails 术语来做到这一点:
Table1.joins(table2: :table3)
导致最终表上的 INNER 连接。
FROM table1
INNER JOIN table2 on table2.id = table1.table2_id
INNER JOIN table3 on table3.id = table2.table3_id
左加入所有
如果我使用left_outer_joins...
Table1.left_joins(table2: :table3)
导致两个表上的 LEFT 连接(不需要)。
FROM table1
LEFT JOIN table2 on table2.id = table1.table2_id
LEFT JOIN table3 on table3.id = table2.table3_id
如何混合连接?
似乎无法在不指定关系的情况下链接连接......也就是说,这些不起作用:
Table1.joins(:table2).left_join(table2: :table3)
Table1.joins(:table2).left_join(:table3)
有什么方法可以按我的方式做吗?
【问题讨论】:
-
您想避免使用
find_by_sql? -
@FabrizioBertoglio - 是的......想利用 Rails 巧妙地从链式操作中混合多个连接;对 sql 进行硬编码更脆弱。
-
我可以从您的帖子中了解更多关于
joins的信息!
标签: ruby-on-rails ruby-on-rails-5