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

