是否有更简洁的方法来获取ActiveRecord查询界面?

时间:2017-06-07 21:33:49

标签: ruby-on-rails activerecord rails-activerecord

我有这个有用,但我认为可能有一个特定的方法。

  @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

1 个答案:

答案 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)