【发布时间】:2009-06-01 21:43:03
【问题描述】:
我习惯了 Django,您可以在其中对查询集运行多种过滤方法,即Item.all.filter(foo="bar").filter(something="else")。
然而,这在 Rails 中并不容易做到。 Item.find(:all, :conditions => ["foo = :foo", { :foo = bar }]) 返回一个数组,这意味着这不起作用:
Item.find(:all, :conditions => ["foo = :foo", { :foo = 'bar' }]).find(:all, :conditions => ["something = :something", { :something = 'else' }])
所以我认为“堆叠”过滤器的最佳方法是修改条件数组,然后运行查询。
所以我想出了这个功能:
def combine(array1,array2)
conditions = []
conditions[0] = (array1[0]+" AND "+array2[0]).to_s
conditions[1] = {}
conditions[1].merge!(array1[1])
conditions[1].merge!(array2[1])
return conditions
end
用法:
array1 = ["foo = :foo", { :foo = 'bar' }] 数组2 = [“某事=:某事”,{:某事='其他'}] 条件 = 组合(数组 1,数组 2) items = Item.find(:all, :conditions => 条件)
这工作得很好。但是我希望能够组合任意数量的数组,或者基本上是写作的简写:
conditions = combine(combine(array1,array2),array3)
有人可以帮忙吗?提前致谢。
【问题讨论】:
-
我想你想要的是这个:Named Scope
标签: ruby-on-rails ruby activerecord