Ruby活动记录连接条件

Ruby活动记录连接条件,ruby,join,activerecord,Ruby,Join,Activerecord,我在Tooltype表中有一个名为“deleted”的列,它可以是true或false。我只想要虚假的记录。不知何故,我只检查了第二个表(toolunits),而没有检查第一个表(tooltype)。因此,如果我的toolunits表中有一列“已删除”,这将起作用: obj = Tooltype.joins(:toolunits).where(toolunits: {deleted: false}).distinct 但事实并非如此(见第三行): 如何使用第一个表中的条件?我在考虑两种方法 T

我在Tooltype表中有一个名为“deleted”的列,它可以是true或false。我只想要虚假的记录。不知何故,我只检查了第二个表(toolunits),而没有检查第一个表(tooltype)。因此,如果我的toolunits表中有一列“已删除”,这将起作用:

obj = Tooltype.joins(:toolunits).where(toolunits: {deleted: false}).distinct
但事实并非如此(见第三行):


如何使用第一个表中的条件?

我在考虑两种方法

Tooltype.joins(:toolunits).where(Tooltype.table_name => {deleted: false})

Tooltype.joins(:toolunits).where('tooltypes.deleted = ?', false)

Tooltype.joins(:tooltunits)。where(已删除:false)。distinct
这是模糊的。我认为您的that@Ursus哦正确的。他在另一个表中有一个
已删除的
列。我刚刚测试了它以确认。在使用哈希时,AR在
where
方法中前缀表名。是,但是,哪个表名?在这个查询中有一个连接。所以有两个表名。它使用调用类的表名。当然,我尝试了一个带有联接的查询,但名称可能存在冲突。我不会把它贴在这里的好吧,太好了。这样回答。这个解决方案显然是最简单的:)没有必要。OP现在一定已经拿到了
Tooltype.joins(:toolunits).where(Tooltype.table_name => {deleted: false})

Tooltype.joins(:toolunits).where('tooltypes.deleted = ?', false)