我有以下developers_controller
,我想根据location_params
执行查询。
在index_update
操作中,我使用用户提供的location
创建变量location_params
作为研究的输入。我想对此变量执行each
循环,以根据用户请求过滤@locations = Location.all
的数据。
这是我的私人方法location_params
:
def location_params
params.require(:location).permit(:country, :location, :surfspot, :barbecue, :villa, :swimmingpool, :skiresort, :singleroom )
end
这是我的index_update
行动:
def index_update
location = Location.new(location_params)
locations = Location.all
location.each do |param, value|
if value != nil
locations = locations.where(param => value)
end
end
end
我无法找到如何循环location
变量。
这是我在Rails控制台中的位置模型:
=> #<Location:0x000000036b6838
id: nil,
host_id: nil,
description: nil,
location: nil,
singleroom: nil,
sharedroom: nil,
surfspot: nil,
barbecue: nil,
villa: nil,
swimmingpool: nil,
skiresort: nil,
created_at: nil,
updated_at: nil,
country: nil,
state: nil,
houseimages: nil
答案 0 :(得分:1)
我会这样做只在查询中使用带有当前值的参数:
def index_update
query_attributes = location_params.select { |_, v| v.present? }
locations = Location.where(query_attributes)
end
或者:
def index_update
query_attributes = location_params.reject { |_, v| v.blank? }
locations = Location.where(query_attributes)
end
答案 1 :(得分:0)
如果您location_params
可以实例化一个新位置,那么它们可能已经成为传递到where
的正确格式:
def index_update
locations = Location.where(location_params)
end
如果您需要从参数中删除nil值:
def index_update
locations = Location.where(location_params.delete_if { |k,v| v.nil? })
end