Ruby Sequel数据集的布尔组合

Ruby Sequel数据集的布尔组合,ruby,sequel,Ruby,Sequel,假设我有一些数据集方法foo,bar和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, :

假设我有一些数据集方法
foo
bar
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
编辑:澄清:

我得到了什么 我想要的
从用户中选择*,其中((或)和(或))
其中
表示我定义的数据集。所以

定义为
(c=42和d=23)

定义为
((a=5,b=23)或(a=23,b=5))

定义为
(d=17)


如何将数据集方法与
和(最重要的)括号链接起来?

我认为您的方法应该返回续集表达式,请看:

您不是在寻找并集和交集方法吗。这些是在数据集上工作的,可以用来代替集合论中的“and”和“OR”

像这样的东西对你不管用吗

fooOrbar = User.foo.union(User.bar)
barOrbaz = User.bar.union(User.baz)
result = fooOrbar.intersect(barOrbaz)

不,它们不会,因为数据集模块返回数据集。我正在寻找一种组合数据集的方法(不仅仅是与
链接,比如
Model.dataset1.dataset2
,而是与
以及括号(如问题中所述)相结合)。实际上,您不是在尝试实现内部联接吗?不,我正在尝试在同一个表上组合不同的数据集。不需要联接。在您的示例中,所有数据都将来自Users表,对吗?只是因为你只处理一个表,但我不想加入。我只想合并数据集。请修复您的代码,它无效:
:a=>23,b:=>5
。此外,方法
dataset\u方法
从何而来?在Ruby 2.1.0和Sequel 4.8.0上运行固定代码,会产生一个
NoMethodError
未定义的方法“dataset\u methods”for User:Class
。是的,这将返回给定的数据,但会生成一个查询,包括
UNION
INTERSECT
。我想得到一个查询,包括
SELECT * FROM users WHERE ((`foo` OR `bar`) AND (`bar` OR `baz`))
SELECT * FROM users WHERE ((<dataset foo> OR <dataset bar>) AND (<dataset bar> OR <dataset baz>))
fooOrbar = User.foo.union(User.bar)
barOrbaz = User.bar.union(User.baz)
result = fooOrbar.intersect(barOrbaz)