一些Rails专家可以在Rails 4中对这种行为有所了解:
>query_string = "agent_id = '1'"
=> "agent_id = '1'"
>Lead.includes('agents').where(query_string).length
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'agent_id' in 'where clause'
>Lead.includes('agents').where(agent_id = '1').length
Lead Load (0.5ms) SELECT `leads`.* FROM `leads` WHERE (1)
LeadsAssignment Load (0.4ms) SELECT `leads_assignments`.* FROM `leads_assignments` WHERE `leads_assignments`.`lead_id` IN (1, 2, 3, 4, 5)
Agent Load (0.5ms) SELECT `agents`.* FROM `agents` WHERE `agents`.`id` IN (1, 2)
=> 5
两个查询应该相同。为什么会失败而另一个失败?
谢谢! 查理
答案 0 :(得分:5)
正如@Andrey指出的那样
Lead.includes('agents').where(agent_id = '1').length
应写成:
Lead.includes('agents').where(agent_id: 1).length
因为where
是一个ruby方法,并且您正在传递ruby哈希,其中哈希的键是列名,值是单元格的值。
编辑:
是的,只是注意到了这个错误。
您没有agent_id
列,您有agents
表,其中有一个(希望)主键id
。
所以你的查询应该是:
Lead.includes('agents').where(agents: { id: 1 }).length
或者:
Lead.includes('agents').where("agents.id = 1").length
答案 1 :(得分:2)
Lead.includes('agents').where(query_string).length
这是一个有效的查询,它会返回正确的结果,但是你可以看到错误
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'agent_id' in 'where clause'
agent_id
表
leads
而
Lead.includes('agents').where(agent_id = '1').length
此语法错误,但查询返回了一些结果,因为agent_id = '1'
是一个赋值操作,它将'1'
返回到where
子句
和执行的查询是
Lead.includes('agents').where(1).length
将返回length
Lead
查询应为
Lead.includes('agents').where(agent_id: 1).length
,您需要在潜在客户表
中添加agent_id