Arel:如何用OR干净地加入多个条件?
在我的Rails应用程序中,我遍历一个数组以创建必须由OR连接的条件列表。 以下是我目前这样做的基本流程。
conditions = nil set.each do |value| condition = value.to_condition conditions = conditions ? conditions.or(condition) : condition end
显然,它并不漂亮,但我仍然不完全了解Arel的方式。 它是否提供了更好的OR加入一组动态生成条件的方法?
这是一个完美的inject
,它可以为你提供一个你可以在其他东西中使用的conditions = set.inject { |conds, cond| conds.or(cond) }
: conditions = set.inject { |conds, cond| conds.or(cond) }
conditions = set.inject { |conds, cond| conds.or(cond) }
甚至可以写成: set.inject(&:or)
非常好。
还有一个有用的插件。
conditions_helper
它有助于产生复杂的条件。
我认为基本上就是这样。 我将条件初始化为基础对象以避免三元组:
scope = Article set.each{|v| scope = scope.or(v.to_condition)}