gpt4 book ai didi

ruby-on-rails - 在 Arel 中,如何将一堆条件与 OR 结合起来?

转载 作者:太空宇宙 更新时间:2023-11-03 16:59:54 24 4
gpt4 key购买 nike

我有一个类似这样的设置:

  table = self.arel_table
nodes = [1,2,3].collect do |c|
table[:foo].eq(c).and( table[:bar].eq(c) )
end

然后我希望将这些条件片段组合起来以类似于以下的 SQL 结尾:

WHERE (foo = 1 AND bar = 1) OR (foo = 2 AND bar = 2) OR (foo = 3 AND bar = 3)

目前我最接近的是:

nodes.inject(nodes.shift) {|memo, node| memo.or( Arel::Nodes::Grouping.new(node) ) }

我以不同的方式尝试过 Arel::Nodes::Grouping.new,但它从来没有按我想要的方式分组。

最佳答案

您可能想使用 squeel ,无需重新发明轮子。

有了它,您的案例将类似于:Model.where {foo.like_any nodes}

编辑:

如果您定义自己的 sifter 会容易得多,它看起来像这样(如果您启用 native 扩展):

nodes.each do |node|
where{foo == node & bar == node}
end

关于ruby-on-rails - 在 Arel 中,如何将一堆条件与 OR 结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9237327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com