Rails - 如何在Model中使查询参数可选?

时间:2016-09-13 15:28:19

标签: ruby-on-rails params optional-parameters

我正在尝试使用多个参数在索引上构建过滤器区域。我的问题是,如果需要,我不知道如何使它们成为可选项。我的意思是,即使我没有为字段设置值,我希望我的过滤器只能用我填充的那些。

我编写的代码运行良好,除非删除一个或多个参数。

def self.filter(type, min, max, start_at, end_at)
 where(type => min..max, :first_date => start_at..end_at).order("#{type}": :desc)
end

我知道我可以使用scope但是因为我是Rails的新手,所以还不太清楚。如果有人可以提供一些提示?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以将这些内容发送到nil

def self.filter(type =nil, min=nil, max=nil, start_at=nil, end_at=nil)
  a = YourModel
  a = a.where(type => min..max) if min.present? && max.present?
  a = a.where(first_date: start_at..end_at) if start_at? && end_at.present?
  a = a.order("#{type}#": :desc) if type.present?
  a
end

答案 1 :(得分:0)

您可以链接多个

result = where(type => min..max)
result = result.where(first_date: start_at..end_at) if start_date && end_date
return result