在 Rails 查询中指定条件包括不起作用
Specifying conditions in Rails Query with includes not working
我真的被一些很简单的东西困住了。我无法在包含的活动记录查询中指定条件。
以下是说明我的问题的代码。
2.2.1 :072 > visitor = Visitor.includes(:campaign).first
2.2.1 :073 > visitor.campaign.merchant_id
=> 123456
上述案例运行良好。
现在,当我尝试以下操作时,它失败了。
2.2.1 :076 > visitor = Visitor.includes(:campaign).where("campaign.merchant_id = 123456").references(:campaign).first
ERROR -- : Mysql2::Error: Unknown column 'campaign.merchant_id' in 'where clause'
非常感谢任何帮助。仅供您参考。
活动有很多访客
访客属于活动
广告系列有一个属性 merchant_id,我用它来指定条件。
你的table不是叫campaigns
不叫campaign
吗? Rails 只是将字符串直接传递给 SQL,因此它会尝试找到 table campaign
。假设您使用的是标准 rails 复数形式,那么 table 名称在这种情况下是错误的。
扩展答案:您的错误是 MySQL 错误,而不是来自 rails。这意味着您的 ruby 代码解析没有错误,因此您需要查看 rails 下面的一步 - 即在数据库中。从错误消息中,您可以看到问题存在于 SQL WHERE
子句中。你可以看看你试图 运行 和
的 SQL
Visitor.includes(:campaign).where("campaign.merchant_id = 123456").to_sql
这会显示类似
的内容
SELECT * from 'visitors' INNER JOIN campaigns
WHERE campaign.merchant_id = 123456
如果您在 MySQL 提示符下尝试 运行 那个 SQL,您会从数据库中得到相同的 "unknown column" 错误。原因是 MySQL 试图找到名为 campaign.merchant_id
的列,但该列不存在,因为 table 部分 (campaign
) 不存在。
如果您将 ruby 代码更改为 where('campaigns.merchant_id = 123456')
,它应该可以工作。
然而,更好的办法是完全留在 ruby 并使用 syntax to add conditions to joined tables:
Visitor.includes(:campaign).where(:campaigns => {:merchant_id => 123456})
我真的被一些很简单的东西困住了。我无法在包含的活动记录查询中指定条件。 以下是说明我的问题的代码。
2.2.1 :072 > visitor = Visitor.includes(:campaign).first
2.2.1 :073 > visitor.campaign.merchant_id
=> 123456
上述案例运行良好。 现在,当我尝试以下操作时,它失败了。
2.2.1 :076 > visitor = Visitor.includes(:campaign).where("campaign.merchant_id = 123456").references(:campaign).first
ERROR -- : Mysql2::Error: Unknown column 'campaign.merchant_id' in 'where clause'
非常感谢任何帮助。仅供您参考。 活动有很多访客 访客属于活动 广告系列有一个属性 merchant_id,我用它来指定条件。
你的table不是叫campaigns
不叫campaign
吗? Rails 只是将字符串直接传递给 SQL,因此它会尝试找到 table campaign
。假设您使用的是标准 rails 复数形式,那么 table 名称在这种情况下是错误的。
扩展答案:您的错误是 MySQL 错误,而不是来自 rails。这意味着您的 ruby 代码解析没有错误,因此您需要查看 rails 下面的一步 - 即在数据库中。从错误消息中,您可以看到问题存在于 SQL WHERE
子句中。你可以看看你试图 运行 和
Visitor.includes(:campaign).where("campaign.merchant_id = 123456").to_sql
这会显示类似
的内容SELECT * from 'visitors' INNER JOIN campaigns
WHERE campaign.merchant_id = 123456
如果您在 MySQL 提示符下尝试 运行 那个 SQL,您会从数据库中得到相同的 "unknown column" 错误。原因是 MySQL 试图找到名为 campaign.merchant_id
的列,但该列不存在,因为 table 部分 (campaign
) 不存在。
如果您将 ruby 代码更改为 where('campaigns.merchant_id = 123456')
,它应该可以工作。
然而,更好的办法是完全留在 ruby 并使用 syntax to add conditions to joined tables:
Visitor.includes(:campaign).where(:campaigns => {:merchant_id => 123456})