Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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
Ruby on rails 3 不在RoR中的查询上_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 不在RoR中的查询上

Ruby on rails 3 不在RoR中的查询上,ruby-on-rails-3,Ruby On Rails 3,在Ruby on rails 3中,我想查询模型的多个字段,如下所示: @project.items.where(:status=>1) 问题是我试图得到与此完全相反的结果。我想要的是@project中状态为而不是1的所有项目。有人一直在寻找这个问题的答案吗?有很多方法可以完成你想做的事情,但是,有些方法比其他方法更好。如果您总是在搜索硬编码号码(即本例中的1),则以下解决方案将起作用: @project.items.where('status != 1') 但是,如果这个值不是硬编码的,您就

在Ruby on rails 3中,我想查询模型的多个字段,如下所示:

@project.items.where(:status=>1)


问题是我试图得到与此完全相反的结果。我想要的是
@project
中状态为而不是1的所有项目。有人一直在寻找这个问题的答案吗?

有很多方法可以完成你想做的事情,但是,有些方法比其他方法更好。如果您总是在搜索硬编码号码(即本例中的1),则以下解决方案将起作用:

@project.items.where('status != 1')
但是,如果这个值不是硬编码的,您就容易受到SQL注入的攻击,因为Rails不会(不能)逃避这种查询。因此,Rails开发人员倾向于对大多数自定义条件(无法通过
散列
构建的条件)使用以下语法:

这个语法有点让人困惑,所以让我来复习一下。基本上,您提供的是
where
子句,它是一个
Array
值。数组中的第一个值是表示要执行的查询的
字符串。在该字符串中需要值的任何位置,都可以放置一个
。这用作占位符。接下来,为查询中的每个问号添加一个元素。例如,如果我有以下内容:

where(['first_name = ? AND last_name = ?', params[:first_name], params[:last_name]]
Rails会自动将这些匹配起来,形成查询。在这个过程中,它还可以逃逸潜在的不安全字符,从而阻止注入


通常,最好使用数组语法,即使对于硬编码的值也是如此。有人告诉我,Rails 3.5中的纯字符串条件会发出警告(未经验证),因此现在就开始使用数组语法并没有什么坏处。

@nayish-我完全重写了我的答案,以便为您提供更好的解释
where(['first_name = ? AND last_name = ?', params[:first_name], params[:last_name]]