Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t quote数组-rails sql_Sql_Ruby On Rails_Ruby - Fatal编程技术网

Can';t quote数组-rails sql

Can';t quote数组-rails sql,sql,ruby-on-rails,ruby,Sql,Ruby On Rails,Ruby,我正在尝试使用以下语法动态创建sql查询: Company.joins(:founder_persons) .where("people.first_name like people[:first_name]", {people: {first_name: 'm%'}}) 但是在rails控制台上运行这个命令会给我带来TypeError:cannotquotearray。我猜这不是我们使用where字符串的方式?修复此错误的正确方法是什么?谢谢。您可以绑定任何值,然后分配它,这样

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

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

但是在rails控制台上运行这个命令会给我带来
TypeError:cannotquotearray
。我猜这不是我们使用where字符串的方式?修复此错误的正确方法是什么?谢谢。

您可以绑定任何值,然后分配它,这样它们的数字应该一致,例如:

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
错误,具体取决于元素是否多于或少于所需元素。

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

例如:

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

Article.where(author: ['Jane', ['Bob']])
将给出错误。快速修复方法是在阵列上运行
flant


(在搜索令人困惑的错误“Can't quote array”(无法引用数组)时会出现此页面,因此请注意)

ooooo yaas,让我试试xDI,我想知道您的意思是否正确,因为
'm%'
我不确定。哦,是的,这有一个问题,实际上查询是动态进行的,因此where字符串可能是
'这样?这个怎么样?像这样?
那么我可以在字符串后面传递一个值数组而不是逗号分隔的值,比如
。其中(…字符串…,[人[:名字],[人[:姓氏]…])
是的,如果值不止一个,你可以用同样的方式绑定它们,注意你不需要使用数组,只需传递逗号分隔的值,只是它们必须重合。这就是问题所在,我不能用逗号分隔它们。我有一个包含所有值的数组。例如,我有一个字符串:
像这样吗?像这样?
我有一个2个值的数组,用于名为
val\u arr
的2个
。那么我将如何
。在哪里('this like?AND that like?',逗号\u分隔\u每个元素\u val\u arr)