ruby喜欢查询错误
ruby like query error
这是我的 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
它呈现我来自 table 的所有数据。它不响应查询。你有什么想法吗?
我的路线是:
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)
查看 log 文件和以下跟踪 :-
Parameters: {"outlet"=>{"query"=>"life"}}
我发现了问题。你需要做 @query = params[:outlet][:query]
.
因为params[:query]为nil,所以结果sql为
where name like '%%'
您在 params[:outlet][:query] 中确实有一个查询参数,您可以在不更改视图的情况下使用它。
但是,由于您不是在创建或更新 Outlet,而且 query 可能不是 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 %>
这是我的 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
它呈现我来自 table 的所有数据。它不响应查询。你有什么想法吗?
我的路线是:
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)
查看 log 文件和以下跟踪 :-
Parameters: {"outlet"=>{"query"=>"life"}}
我发现了问题。你需要做 @query = params[:outlet][:query]
.
因为params[:query]为nil,所以结果sql为
where name like '%%'
您在 params[:outlet][:query] 中确实有一个查询参数,您可以在不更改视图的情况下使用它。
但是,由于您不是在创建或更新 Outlet,而且 query 可能不是 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 %>