无法引用数组 - rails sql

时间:2017-11-02 15:35:00

标签: sql ruby-on-rails ruby

我尝试使用以下语法动态创建SQL查询:

Company.joins(:founder_persons)
       .where("people.first_name like people[:first_name]", {people: {first_name: 'm%'}})

但是在rails控制台上运行它会给我TypeError: can't quote Array。我猜这不是我们如何使用where字符串?修复此错误的正确方法是什么?感谢。

2 个答案:

答案 0 :(得分:3)

你可以绑定任何值,然后分配它,这样它们应该在数字上重合,如:

Model.joins(:join_table)
     .where('models.first_attribute LIKE ? AND models.second_attribute LIKE ?', value_for_first_attr, value_for_second_attr)

如果使用数组,则应访问要比较的每个索引,或者可以在splat *之前,并指定一个值,如:

Model.joins(:join_table)
     .where('models.first_attribute LIKE ? AND models.second_attribute LIKE ?', *array_of_values)

请注意,虽然这样你传递的是“整个”数组,但它的大小或数字也应该重合,否则会引发ActiveRecord::PreparedStatementInvalid错误,具体取决于是否有更多或更少的元素。

答案 1 :(得分:2)

发生此错误的一个原因是使用嵌套数组作为SQL值。

示例:

Article.where(author: ['Jane', 'Bob'])

有效,但是:

Article.where(author: ['Jane', ['Bob']])

会给出错误。快速解决方法是在阵列上运行flatten

(提及此问题,因为在搜索令人困惑的错误“无法引用数组”时出现此页面。)