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_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
回答:
由于@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