Rails的查询

使用变量时,那里查询失败一些Rails的专家能否对这种行为在轨道4,5一些轻:Rails的查询

>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

这两个查询应该是相同的。为什么一个会失败,另一个不会呢?

谢谢! 查理

回答:

Lead.includes('agents').where(query_string).length 

这是将返回正确的结果有效的查询,但你可以看到错误

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'agent_id' in 'where clause' 

您还没有agent_idleads

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

回答:

由于@Andrey指出

Lead.includes('agents').where(agent_id = '1').length 

应该写成:

Lead.includes('agents').where(agent_id: 1).length 

因为where是红宝石方法和要传递一个Ruby散列,其中散列的关键是列名称和值是单元格的值。

编辑:

是的,只是注意到了错误。 你没有agent_id专栏,你有agents表,它有一个(希望)主键id。 所以您的查询应该是:

Lead.includes('agents').where(agents: { id: 1 }).length 

或者:

Lead.includes('agents').where("agents.id = 1").length 

以上是 Rails的查询 的全部内容, 来源链接: utcz.com/qa/264320.html

回到顶部