首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在rails3中使用AR查询接口在where中指定多个值

如何在rails3中使用AR查询接口在where中指定多个值
EN

Stack Overflow用户
提问于 2011-02-17 22:15:32
回答 7查看 55.8K关注 0票数 36

rails指南中关于活动记录查询接口here的2.2节

这似乎表明,我可以传递一个字符串,指定条件,然后是一个值数组,在构建arel时,这些值应该在某个时候被替换。因此,我有一个语句来生成我的条件字符串,它可以是与它们之间的和和或链接在一起的不同数量的属性,我把一个数组作为第二个arg传递给where方法,然后我得到:

ActiveRecord::PreparedStatementIn有效值:绑定变量数错误(1为5)

这让我相信我做得不对。然而,我找不到任何关于如何正确地做这件事的东西。要以另一种方式重新声明问题,我需要将一个字符串传递给where方法,例如"table.attribute =?和table.attribute1 =?或table.attribute1 = ?“这些条件有一个未知的数目,它们在一起或连接在一起,然后传递一些东西,我认为数组是第二个参数,用于替换第一个参数条件字符串中的值。这是正确的方法吗,还是,我只是在某个地方遗漏了其他一些巨大的概念,而我却完全错了?我认为在某种程度上,这是可能的,而不是仅仅生成一个原始sql字符串。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-02-17 23:01:44

听起来你在做这样的事:

代码语言:javascript
运行
复制
Model.where("attribute = ? OR attribute2 = ?", [value, value])

然而,你需要这样做:

代码语言:javascript
运行
复制
# notice the lack of an array as the last argument
Model.where("attribute = ? OR attribute2 = ?", value, value)

有关如何工作的更多细节,请查看http://guides.rubyonrails.org/active_record_querying.html#array-conditions

票数 29
EN

Stack Overflow用户

发布于 2014-10-03 16:42:38

这其实很简单:

代码语言:javascript
运行
复制
Model.where(attribute: [value1,value2])
票数 53
EN

Stack Overflow用户

发布于 2014-09-10 09:21:16

而不是像这样多次将相同的参数传递给where()

代码语言:javascript
运行
复制
User.where(
  "first_name like ? or last_name like ? or city like ?", 
  "%#{search}%", "%#{search}%", "%#{search}%"
)

您可以很容易地提供一个散列。

代码语言:javascript
运行
复制
User.where(
  "first_name like :search or last_name like :search or city like :search",
  {search: "%#{search}%"}
)

这使得您的查询对于长参数列表来说更加可读性。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5035365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档