Rails form_tag没有POSTing,在源页面上获取

时间:2017-10-17 07:42:02

标签: ruby-on-rails ruby-on-rails-4

已经有一段时间了,因为除了form_for之外我还需要其他东西。

现在我正在尝试设置管理区域搜索,其中搜索框位于菜单栏中。但是,不是POST到结果路径,而是使用GET参数重新加载现有页面,包括authenticity_token

所以我的设置:

的Gemfile

source 'https://rubygems.org'
ruby '2.2.3'
gem 'rails', '4.2.3'
# And so on....

的routes.rb

namespace :admin do
    resources :results do #search results
        collection do
            get :display
        end
    end

    # many more routes here
end

系统管理员/ 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 "&rarr;".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'时刻做好准备。

1 个答案:

答案 0 :(得分:0)

问题出在你的路线上。 在您的控制台中写下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,或指定要在控制器中使用的视图。