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
我正在尝试使用多个参数在我的索引上构建一个过滤区域。我的问题是,如果需要的话,我不知道如何让它们中的每一个都是可选的。我的意思是,即使我没有为字段设置值,我也希望我的过滤器仅适用于我填写的字段。
我编写的这段代码运行良好,除非我删除了一个或多个参数。
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