【问题标题】:How do I route search form to controller method that redirects to /show?如何将搜索表单路由到重定向到 /show 的控制器方法?
【发布时间】:2016-01-27 19:17:30
【问题描述】:

我还是 Rails 的新手,尝试解决一些我理解的问题有点高水平。我的应用程序需要接受用户输入的代码(事件的散列事件代码唯一),然后将它们重定向到该特定事件的显示页面(如果找到)。如果未找到,则显示错误 div。
与其在我测试它时抛出错误,就像它应该的那样,它只是将我指向一个通用的 /show 页面。我从大约十几个其他 Stack 帖子和教程中拼凑出这一点,但没有一个可以准确地展示我需要的那种功能。我需要的是,当这个表单提交时,它需要在控制器中运行一些试图 .find 特定对象的东西,如果成功运行重定向到它。在进行故障排除时,我拉出控制器中的重定向行,发现它甚至没有运行,其他东西将它指向 /show。如何让我的表格只问我的方法该怎么做?自定义路线是否正确?

现在,我的表单如下所示:

<h2><br/>Input your event code below<br/></h2>
<p>
<form action="<%= lookup_path(:code) %>" method="get" >
    <%= text_field_tag( :code, nil, class: "input_field") %>
    <%= submit_tag "Submit", :name => nil, :class =>"submit_button" %>
</form>
</p>

<div id="errorbar">
    <%= @error_bar %>
</div>`

我的整个控制器是这样的:

class EventController < ApplicationController
    def index
    end

    def lookup
        begin
            an_event = Event.where(:event_code =>params[:code])
        rescue ActiveRecord::RecordNotFound
            @error_bar = "Code not found"
        end  
    end
end

就我路线的相关部分而言:

resources :event do
    resources :room
end

get 'event/:event_code' => 'event#lookup', as: :lookup

Rake 路线:
Prefix Verb URI Pattern Controller#Action welcome_index GET /welcome/index(.:format) welcome#index root GET / welcome#index event_room_index GET /event/:event_id/room(.:format) room#index POST /event/:event_id/room(.:format) room#create new_event_room GET /event/:event_id/room/new(.:format) room#new edit_event_room GET /event/:event_id/room/:id/edit(.:format) room#edit event_room GET /event/:event_id/room/:id(.:format) room#show PATCH /event/:event_id/room/:id(.:format) room#update PUT /event/:event_id/room/:id(.:format) room#update DELETE /event/:event_id/room/:id(.:format) room#destroy event_index GET /event(.:format) event#index POST /event(.:format) event#create new_event GET /event/new(.:format) event#new edit_event GET /event/:id/edit(.:format) event#edit event GET /event/:id(.:format) event#show PATCH /event/:id(.:format) event#update PUT /event/:id(.:format) event#update DELETE /event/:id(.:format) event#destroy lookup GET /event/:event_code(.:format) event#show

【问题讨论】:

    标签: ruby-on-rails forms routing


    【解决方案1】:

    解决方案:

    app/views/events/index.html.erb

    <h2><br/>Input your event code below<br/></h2>
    <p>
    <form action="<%= lookup_path(:code) %>" method="get" >
        <%= text_field_tag( :code, nil, class: "input_field") %>
        <%= submit_tag "Submit", :name => nil, :class =>"submit_button" %>
    </form>
    </p>
    

    app/controllers/event_controller.rb

    class EventController < ApplicationController  
      ............  
      def show
        @an_event = Event.where(:event_code =>params[:code])
      end
    end
    

    app/views/events/show.html.erb

    <% if @an_event.present? %>
      <!-- show event -->
      <%= @an_event.name %>
    <% else %>
      <!-- message with error -->
    <% end %>
    

    看看这个

    config/routes.rb

    event GET    /event/:id(.:format) event#show
    .....
    lookup GET   /event/:event_code(.:format) event#show
    

    路线重复。将 lookup 重命名为 show。删除lookup 路由。

    【讨论】:

    • 不走运。如果我注释掉查找方法中的每一行,它仍然会重定向到“/event/q?code=_thecodeyouputinthetextbox_”并给出我的占位符 /show 页面。我的路线或表单出现问题,导致它始终转到该页面,忽略任何重定向或错误检查的尝试。
    • 请在根项目中执行rake routes并显示结果。
    • 我现在似乎能够从我的事件中去除独特的参数并将它们显示在显示页面上。标记已解决,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    相关资源
    最近更新 更多