如何在查询中使用params - Ruby?

时间:2018-05-27 01:28:47

标签: ruby-on-rails ruby

我有一个转到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

这将返回所有位置,并没有考虑传入的参数。我在这里缺少什么?

谢谢!

2 个答案:

答案 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)