Sequel 数据集的布尔组合

ibl*_*lue 5 ruby sequel

鉴于我有一些数据集方法foobar并且baz

class User < Sequel::Model
  dataset_module do
    def foo
      # Some complicated dataset here
      where(:c => 42, :d => 23)
    end

    def bar
      # Even more complicated dataset here
      where(:a => 5, :b => 23).or(:a => 23, :b => 5)
    end

    def baz
      where(:d => 17)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我想查询数据库(foo || bar) && (bar || baz)(或其他一些复杂的数据集)。所以我试过了

User.where{|u| (u.foo | u.bar) & (u.bar | u.baz)}
Run Code Online (Sandbox Code Playgroud)

编辑:澄清:

我得到了什么

SELECT * FROM users WHERE ((`foo` OR `bar`) AND (`bar` OR `baz`))
Run Code Online (Sandbox Code Playgroud)

我想要的

SELECT * FROM users WHERE ((<dataset foo> OR <dataset bar>) AND (<dataset bar> OR <dataset baz>))
Run Code Online (Sandbox Code Playgroud)

其中<dataset xyz>意味着我定义的数据集。所以

<dataset foo> 被定义为 (c = 42 AND d = 23)

<dataset bar> 被定义为 ((a = 5 AND b = 23) OR (a = 23, b = 5))

<dataset baz> 被定义为 (d = 17)

如何使用AND,OR和(最重要的)括号链接数据集方法?

Ale*_*lex 0

我相信你的方法应该返回续集表达式,请参阅:http://sequel.jeremyevans.net/rdoc/classes/Sequel/SQL.html