有一段时间
不需要任何东西了,除了form_for
.现在,我正在尝试设置一个管理区域搜索,其中搜索框位于菜单栏中。但是,它不是 POST 到结果路径,而是使用 GET 参数重新加载现有页面,包括 authenticity_token
.
所以我的设置:
宝石文件
source 'https://rubygems.org'
ruby '2.2.3'
gem 'rails', '4.2.3'
# And so on....
路线.rb
namespace :admin do
resources :results do #search results
collection do
get :display
end
end
# many more routes here
end
admin/results_controller.rb
class Admin::ResultsController < ApplicationController
def display
@results = Elasticsearch::Model.search(params[:query], [Article]).paginate(page: params[:page], per_page: 30)
respond_to do |format|
format.html # index.html.erb
end
end
private
# Don't think this is really relevant, adding out of desparation
def result_params
params.require(:result).permit(:query)
end
end
在我的通用管理栏中:
<%= form_tag(display_admin_results_path, method: :post) do %>
<%= text_field_tag :query, params[:query], {class: "form-control", placeholder: "Search"} %>
<span class="input-group-btn"><%= submit_tag "→".html_safe, class: "btn btn-success" %></span>
<% end %>
日志显示没有重定向的迹象,Chome控制台显示没有javascript"bork"。
而不是提交该表格并发送给/admin/results/display
甚至/admin/results/display?query=blah
我正在得到
?utf8=✓&authenticity_token=j3w4dtBbFLzJzqWGZ9x4Q4GsUi%2FxmjYFrPjdzm8ccLKdxpOR0KwrX2hIAzXkR96cuTVgwG1sbYBKDdSO%2F3O6Wg%3D%3D&query=hello&commit=→
这一定是显而易见的...为"DOH"时刻做好准备。
问题出在您的路线上。在控制台中写入rails routes
(或rake routes
),您将看到它需要display_admin_results_path
的 get 方法。因此,您可以使用GET方法访问控制器。
您的路线:
display_admin_results GET /admin/results/display(.:format) admin/results#display
admin_results GET /admin/results(.:format) admin/results#index
POST /admin/results(.:format) admin/results#create
admin_result GET /admin/results/:id(.:format) admin/results#show
PATCH /admin/results/:id(.:format) admin/results#update
PUT /admin/results/:id(.:format) admin/results#update
DELETE /admin/results/:id(.:format) admin/results#destroy
你应该实现你的搜索查询,以便它将使用 POST,并返回相应的视图(这实际上不是索引)。
此外,渲染方法使用相应的名称搜索视图,因此您可能希望创建display.html.erb file
,或指定要在控制器中使用的视图。