像查询错误的ruby

时间:2015-05-30 11:11:50

标签: mysql ruby-on-rails ruby sql-like

这是我的mysql代码,如query:

def search
    params.permit!
    @query = params[:query]
    respond_to do |format|
        @outlet = Outlet.select(:name).where("name like ?","%#{@query}%")
        format.json { render json: @outlet }
    end
end

它从表中呈现我的所有数据。它不响应查询。你有什么想法吗?

我的路线是:

 namespace :api do
  resources :outlets, :defaults => { :format => 'json'}
  get 'outlets/auto_complete' => 'outlets#auto_complete', :defaults =>       { :format => 'json'}
  post 'outlets/search' => 'outlets#search', :defaults => { :format => 'json' }

 end

development.log是

    Started POST "/api/outlets/search" for 127.0.0.1 at 2015-05-30 16:56:22 +0530
Processing by Api::OutletsController#search as JSON
  Parameters: {"outlet"=>{"query"=>"life"}}
  [1m[35mOutlet Load (0.1ms)[0m  SELECT `outlets`.`name` FROM `outlets`  WHERE (name like '%%')
Completed 200 OK in 28ms (Views: 22.3ms | ActiveRecord: 1.7ms)

2 个答案:

答案 0 :(得分:4)

查看 log 文件并在下面跟踪: -

Parameters: {"outlet"=>{"query"=>"life"}}

我发现了这个问题。您需要@query = params[:outlet][:query]

答案 1 :(得分:1)

这是因为params [:query]是nil,所以生成的sql是

where name like '%%' 

你在params [:outlet] [:query]中有一个查询参数,你可以在不改变视角的情况下使用它。

但是,由于您没有创建或更新Outlet,并且查询可能不是Outlet模型的属性,因此以这种方式构造表单并不是真的有意义。

尝试使用form_tag而不是form_for,并且不要将其传递给Outlet实例。也可以使用text_field_tag而不是form.text_field。这样就可以设置params [:query],而不是包含在params [:outlet]下。

新表格看起来有点像这样:

<%= form_tag do %>
  <%= text_field_tag :query %>
  <%= submit_tag %>
<% end %>