将活动记录查询链接在一起

时间:2015-12-16 06:50:25

标签: ruby-on-rails

我有一个搜索表单,其中包含city,building_type,min_price,max_price等参数。

将所有这些查询链接在一起的最佳方法是什么。如果用户没有设置参数,我希望它只返回所有记录。

这样的东西
city=params[:city] || "all"
building_type=params[:building_type] || "all"
min_price=params[:min_price] || "all"

@results= Property.where(city: city,building_type: building_type,min_price: min_price)

有可能做这样的事吗?看到没有"所有"关键字。

1 个答案:

答案 0 :(得分:1)

您可以通过在单个变量中分配要执行的所有查询的结果来链接活动记录查询

properties = Property.all
properties = properties.where(city: params[:city]) if params[:city].present?
properties = properties.where(building_type: params[:building_type]) if params[:building_type].present?

此外,如果参数键与数据库中的列相同,您可以将它们全部放在一个数组中并循环遍历它,如

properties = Property.all

%i[city building_type min_price].each do |column_name|
  next if params[column_name].blank?
  properties = properties.where(column_name => params[column_name])
end

注意

第一行properties = Property.all假定它返回一个ActiveRecord::Relation对象,这是Rails 4中的默认值(不确定)。如果您使用的是Rails 3,请使用Property