首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >( this AND this) OR ( this AND this)的Arel语法

( this AND this) OR ( this AND this)的Arel语法
EN

Stack Overflow用户
提问于 2012-05-01 03:15:09
回答 5查看 722关注 0票数 4

我如何在Arel ( this AND this)或( this AND this)中做到这一点?

上下文是rails 3.0.7

EN

回答 5

Stack Overflow用户

发布于 2012-10-02 20:42:46

Mike的回答基本上就是你想要的

代码语言:javascript
复制
class Model < ActiveRecord::Base
  def self.this_or_that(a1, a2, a3, a4)
    t = Model.arel_table
    q1 = t[:a].eq(a1).and(t[:b].eq(a2))
    q2 = t[:c].eq(a3).and(t[:d].eq(a4))
    where(q1.or(q2))
  end
end

我在Arel上拼凑的一些slides

票数 7
EN

Stack Overflow用户

发布于 2012-05-01 03:27:36

我会把所有这些都放在一个where块中。例如,这里有一个基于类似复杂“where”子句的“scope”:

代码语言:javascript
复制
class Foo < ActiveRecord::Base
  def self.my_complex_where(args)
    where("(col1 = ? AND col2 = ?) OR (col3 = ? AND col4 = ?)", 
          args[:val1], args[:val2], args[:val3], args[:val4])
  end
end

或者,您可以使用以下表示法来完成此操作:

代码语言:javascript
复制
class Foo < ActiveRecord::Base
  def self.my_complex_where(args)
    where("(col1 = :val1 AND col2 = :val2) OR (col3 = :val3 AND col4 = :val4)", 
          :val1 => args[:val1], 
          :val2 => args[:val2], 
          :val3 => args[:val3],
          :val4 => args[:val4])
  end
end
票数 2
EN

Stack Overflow用户

发布于 2012-06-06 22:27:06

你需要下拉到更原始的AREL

代码语言:javascript
复制
t = Model.arel_table
a = (t[:a].eq(nil).and(t[:b].eq(nil)))
b = (t[:a].not_eq(nil).and(t[:b].not_eq(nil)))
Model.where(a.and(b))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10389266

复制
相关文章

相似问题

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