我有一个转到Rails控制器的ajax GET请求,并返回一个位置列表。
用户应该能够传入尽可能多的参数进行搜索。我无法弄清楚如何使用传递的参数进行查询。用户可以传递一个参数或多个参数。
return $.ajax({
type: "GET",
url: '/map_view_locations',
data: {
'location': {
'waitlist': true,
}
},
success: function(locations) {
console.log(locations)
}
})
在控制器中:
def map_view_locations
puts 'params'
location_params[:location]
@locations = Location.where(location_params[:location]).includes(:food, :pricing)
respond_to do |format|
format.json do
render json: @locations.to_json(:include => [:food, :pricing])
end
end
end
这将返回所有位置,并没有考虑传入的参数。我在这里缺少什么?
谢谢!
答案 0 :(得分:0)
Where子句通过哈希维护多个参数,例如
where(param1: value1, param2: value2)
在您的情况下,我看到您使用location_params
方法。
我认为看起来类似于:
def location_params
params.require(:location).permit(:waitlist)
end
因此,您的location_params
方法会返回此哈希值:
{ waitlist: true }
当您致电location_params[:location]
时,它会为您提供nil
,从而忽略where
子句。
尝试
Location.where(location_params)
而不是
Location.where(location_params[:location])
我认为应该有效
答案 1 :(得分:-1)
如果我理解你的问题,也许这会指出你正确的方向?
property = params[:location].first
value = params[:location].last
Location.where("#{property} like ?", value).includes(:food, :pricing)