我有这个有用,但我认为可能有一个特定的方法。
@deals = Deal.where("1=1")
if @dealFilter.min.to_i > 0
@deals = @deals.where("size >= ?", @dealFilter.min)
end
if ...
我尝试了Deal.select
,但它需要参数。我找到了Deal.none
,但总是没有返回。我尝试了Deal.where
,但当我尝试将另一个undefined method ``where' for #<ActiveRecord::QueryMethods::WhereChain:0x0000001d2bfb20>
链接起来时,它给了where
。
我有很多条件链在一起。如果没有条件匹配,则应返回Deal.all
。
参考:http://guides.rubyonrails.org/active_record_querying.html
答案 0 :(得分:1)
您可以使用ActiveRecord范围,并将逻辑移动到您的模型中。例如:
class Deal < ActiveRecord::Base
scope :filter_min, ->(min) {
where("size >= ?", min) if min.to_i > 0
}
scope :filter_max, ->(max) {
where("size <= ?", max) if max.to_i > 0
}
end
然后在你的控制器中你可以写:
Deal.filter_min(@dealFilter.min).filter_max(@dealFilter.max)