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

如何用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 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

你会做


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

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


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

TA贡献1752条经验 获得超4个赞

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


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

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


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

TA贡献1811条经验 获得超5个赞

使用ARel


t = Person.arel_table


results = Person.where(

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

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

)


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

TA贡献1797条经验 获得超6个赞

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
  • 4 回答
  • 0 关注
  • 565 浏览

添加回答

举报

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