我有这样的关系:
class Action < ApplicationRecord
has_many :actions_users
我试着做了一个类似的查询:
select *
from actions left outer join actions_users
on actions_users.action_id = actions.id and actions_users.user_id = 1
where actions.user_id = 1
同时,根据我的经验,在我尝试的所有结果中,
select *
from actions left outer join actions_users
on actions_users.action_id = actions.id
where actions.user_id = 1 and actions_users.user_id = 1
连接条件代码和一般条件在where
函数中。
我怎么才能算出来呢?
4条答案
按热度按时间ylamdve61#
您可以在join query中传递一个字符串,并为此使用rails表命名约定。
6l7fqoea2#
在Rails 7之前,无法直接在
OUTER JOIN
上指定条件,请参阅在连接表上指定条件的文档。所示的示例适用于INNER JOIN
s(因为它们使用.where
),但出于同样的原因,不适用于OUTER JOIN
s。您可以尝试手动指定
OUTER JOIN
,但在传递参数时会遇到问题:因此,您需要像这样执行参数替换:
然后你可以使用
Actions.joins(outer_join_sanitized)
。此时,您可能会同意,从一开始就使用原始SQL运行是更简单的方法。tnkciper3#
虽然你还没有要求...
db2dz4w84#
因为有一个通用的
where
条件,所以可以使用includes
。这将生成一个LEFT OUTER JOIN
查询:或者,如果您使用的是
Rails 5+
,Active Record提供了一个finder方法left_outer_joins
: