2015-05-30 53 views
2

这是我对于像查询MySQL代码:红宝石像查询错误

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) 
+3

有什么错误? –

+0

它呈现我的所有数据表格,..查询不起作用 –

+0

显示你通过'params [:query]传递什么数据',,,显示控制台日志.. –

回答

4

望着日志文件和下方跟踪: -

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

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

+0

cool .. njoy RoR! –

+0

再次感谢你,再见 –

1

这是因为PARAMS [:查询]为零,所以生成的SQL是

where name like '%%' 

你确实有params中的查询参数[:出口] [:查询],你可以在不改变使用视图。

但是,由于您没有创建或更新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 %>