相关疑难解决方法(0)

Rails:如何使用OR而不是AND链接范围查询?

我正在使用Rails3,ActiveRecord

只是想知道如何用OR语句而不是AND来链接范围.

例如

Person.where(:name => "John").where(:lastname => "Smith")
Run Code Online (Sandbox Code Playgroud)

这通常会返回name ='John'和lastname ='Smith',但我想:

name ='John'或lastname ='Smith'

activerecord ruby-on-rails ruby-on-rails-3 rails-activerecord

131
推荐指数
14
解决办法
10万
查看次数

ActiveRecord Arel OR条件

如何使用逻辑OR而不是AND组合2个不同的条件?

注意:作为轨道范围生成2个条件,并且不能轻易地将其更改为where("x or y")直接类似的条件.

简单的例子:

admins = User.where(:kind => :admin)
authors = User.where(:kind => :author)
Run Code Online (Sandbox Code Playgroud)

它很容易应用和条件(对于这个特殊情况是没有意义的):

(admins.merge authors).to_sql
#=> select ... from ... where kind = 'admin' AND kind = 'author'
Run Code Online (Sandbox Code Playgroud)

但是,如何生成具有2种不同Arel关系的以下查询?

#=> select ... from ... where kind = 'admin' OR kind = 'author'
Run Code Online (Sandbox Code Playgroud)

似乎(根据Arel自述文件):

OR运算符尚不支持

但是我希望它不适用于此并期望写出如下内容:

(admins.or authors).to_sql
Run Code Online (Sandbox Code Playgroud)

ruby sql activerecord ruby-on-rails arel

58
推荐指数
4
解决办法
3万
查看次数

将两个命名范围与OR组合(而不是AND)

我想找到所有Annotations身体都是:

  • 等于 "?"
  • 要么
  • 喜欢 "[?]"

最好的方法是什么?

我想尽可能使用SearchLogic,但是SearchLogic允许您执行以下各项操作:

  • Annotation.body_equals('?')
  • Annotation.body_like('[?]')

你总是可以将它们连在一起: Annotation.body_equals('?').body_like('[?]')

我不确定如何将它们结合起来OR.

请注意,如果命名范围与参数相同,OR 可以将它们组合在一起.我可以这样做:

 Annotation.body_equals_or_body_like('?')
Run Code Online (Sandbox Code Playgroud)

但这没有用.

请注意,我没有附加到SearchLogic,但对于不需要破坏其抽象的解决方案来说,它会很棒.

ruby-on-rails searchlogic

7
推荐指数
2
解决办法
5020
查看次数

使用 OR 组合多个命名范围

我正在尝试合并两个范围或向现有范围添加更多内容。

scope :public_bids, -> {
  where(status: [Status::ACCEPTED, Status::OUTBID, Status::SOLD, Status::NO_SALE],
        bid_type: [BidType::MANUAL, BidType::AUTO, BidType::LIVE])
scope :outbid_maxbids, -> {
  where(status: Status::OUTBID, bid_type: BidType::MAXBID)
Run Code Online (Sandbox Code Playgroud)

我无法确定如何将OR它们组合在一起或合并到一个范围中。有什么建议/指导吗?我更希望将它们合并到一个范围中。

ruby named-scope ruby-on-rails rails-activerecord

5
推荐指数
1
解决办法
4429
查看次数