为了账号安全,请及时绑定邮箱和手机立即绑定

如何用OR而不是AND链接作用域查询?

/ 猿问

如何用OR而不是AND链接作用域查询?

跃然一笑 2019-12-16 11:21:42

如何用OR而不是AND链接作用域查询?

我正在使用Rails3,ActiveRecord


只是想知道如何用OR语句而不是AND链接作用域。


例如


Person.where(:name => "John").where(:lastname => "Smith")

通常返回:


name = 'John' AND lastname = 'Smith'

但我想:


`name = 'John' OR lastname = 'Smith'


查看完整描述

4 回答

?
偶然的你

你会做


Person.where('name=? OR lastname=?', 'John', 'Smith')

目前,新的AR3语法不提供任何其他OR支持(即不使用某些3rd party gem)。


查看完整回答
反对 回复 2019-12-16
?
幕布斯5086720

根据此拉取请求,Rails 5现在支持以下用于链接查询的语法:


Post.where(id: 1).or(Post.where(id: 2))

通过这个gem还将功能移植到Rails 4.2中。


查看完整回答
反对 回复 2019-12-16
?
杨魅力

使用ARel


t = Person.arel_table


results = Person.where(

  t[:name].eq("John").

  or(t[:lastname].eq("Smith"))

)


查看完整回答
反对 回复 2019-12-16
?
互换的青春

Rails4的更新


不需要第三方宝石


a = Person.where(name: "John") # or any scope 

b = Person.where(lastname: "Smith") # or any scope 

Person.where([a, b].map{|s| s.arel.constraints.reduce(:and) }.reduce(:or))\

  .tap {|sc| sc.bind_values = [a, b].map(&:bind_values) }

旧答案


不需要第三方宝石


Person.where(

    Person.where(:name => "John").where(:lastname => "Smith")

      .where_values.reduce(:or)

)


查看完整回答
反对 回复 2019-12-16

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信