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

Rails - how to make query parameters optional in Model?

我正在尝试使用多个参数在我的索引上构建一个过滤区域。我的问题是,如果需要的话,我不知道如何让它们中的每一个都是可选的。我的意思是,即使我没有为字段设置值,我也希望我的过滤器仅适用于我填写的字段。

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

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 的新手,所以不太清楚。如果有人可以提供一些提示?谢谢!

您可以链接多个 where

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

您可以将这些归因于 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