我參考了官方的教學,也閱讀了Stackoverflow上所有類似的問答,但我沒有使用Pagy和AJAX,所以不是同一個錯誤。
我正在嘗試搜索模型name列的值。Task但是,當我輸入與現有名稱值匹配的關鍵字并按Search時,結果為空白。我想不通為什么?
這是控制器的一部分:
def index
@name = Task.ransack(name_cont: params[:q])
@tasks = @name.result
puts @tasks
end
這是視圖
<%= search_form_for @name do |f| %>
<%= f.label :name, "Search for" %>
<%= f.search_field :name, placeholder: "Mission Name" %>
<%= f.submit %>
<% end %>
<h1><%= t('task_list') %></h1>
<ul>
<% @tasks.each do |task| %>
<li>
<%= task.name %>
<%= t('task_status') %>:<%= task.status %>
<%= link_to t('task_cont') , task_path(task) %>
<%= link_to t('task_do_edit') , edit_task_path(task) %>
<%= link_to t('task_do_kill') , task_path(task), method: :delete, data:{ confirm: t('task_do_sure') } %>
</li>
<% end %>
</ul>
這是終端日志
Started GET "/my_task_list?q[name]=TT&commit=搜尋" for 127.0.0.1 at 2022-03-18 15:22:49 0800
Processing by TasksController#index as HTML
Parameters: {"q"=>{"name"=>"TT"}, "commit"=>"搜尋"}
Task Load (0.3ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."name" ILIKE '%{"name"=>"TT"}%'
? app/controllers/tasks_controller.rb:14:in `puts'
Rendering layout layouts/application.html.erb
Rendering tasks/index.html.erb within layouts/application
Rendered tasks/_navbar.html.erb (Duration: 0.4ms | Allocations: 298)
Rendered tasks/index.html.erb within layouts/application (Duration: 1.2ms | Allocations: 830)
[Webpacker] Everything's up-to-date. Nothing to do
Rendered layout layouts/application.html.erb (Duration: 83.5ms | Allocations: 3871)
Completed 200 OK in 87ms (Views: 84.3ms | ActiveRecord: 0.3ms | Allocations: 5108)
uj5u.com熱心網友回復:
你的代碼應該這樣Task.ransack(name_cont: params[:q][:name])寫,因為你的引數看起來像這樣:{"q"=>{"name"=>"TT"} }.
但是,您正在使用相同的操作index來呈現初始頁面(當用戶登陸它時)以及Search按下之后。當頁面首先渲染時,即http://localhost/tasks引數q不存在,寫入params[:q][:name]顯然會失敗,因為params[:q]is nil。
理想情況下,您應該繼續index呈現搜索表單并為search.
但是,如果你想保持一切原樣,你可以這樣寫:
假設你有一個TasksController:
class TasksController < ApplicationController
def index
@query = Task.ransack(params[:q])
@tasks = @query.result
end
end
搜索表單在/tasks:
<%= search_form_for @query do |f| %>
<%= f.label :name, "Search for" %>
<%= f.search_field :name_cont, placeholder: "Mission Name" %>
<%= f.submit %>
<% end %>
....
您會看到我添加name_cont為搜索欄位。您可以添加更多,即status_eq,所有將在params[:q]您按下時發送到服務器Search。
注意日志以查看q外觀以及在 中執行的查詢Tasks。
Task Load (0.9ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."name" ILIKE '%test%'
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/446683.html
