2016-01-27 1 views
0

Я до сих пор новичок в Rails и пытаюсь решить что-то, что я понимаю, немного выше уровня. Моему приложению необходимо принять ввод кода пользователем (хэшированный код события уникальный для события), а затем перенаправить их на страницу показа этого конкретного события, если она найдена. Если он не найден, он отображает ошибку div.
Вместо того, чтобы бросать ошибку, когда я ее тестирую, как и следовало ожидать, она просто указывает мне на общую страницу/показать. Я собрал это вместе примерно из дюжины других сообщений Stack и учебников, и ни один из них не продемонстрировал точно такую ​​функциональность, в которой я нуждаюсь. Мне нужно, чтобы, когда эта форма отправляется, она должна запускать что-то в контроллере, который пытается привязать этот конкретный объект, и в случае успеха перенаправляет его. При устранении неполадок я вытащил эту строку перенаправления в свой контроллер и обнаружил, что она даже не работает, что-то еще указывало на ее/показать. Как мне получить форму, чтобы просто спросить мой метод, что делать? Является ли обычным маршрутом правильный путь?

Прямо сейчас, моя форма выглядит следующим образом:Как отправить форму поиска методу контроллера, который перенаправляет/показывается?

<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 

Рейк-маршруты:
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

ответ

0

Решение:

приложение/просмотров/События/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> 

приложение/контроллеры/event_controller.rb

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

приложение/просмотров/события/show.html.erb

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

взглянуть на эту

конфигурации/routes.rb

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

Маршруты повторяются. переименовать lookup в show. Удалите lookup маршрут.

+0

Не повезло. если я прокомментирую каждую строку в методе поиска, она все же перенаправляется на «/ event/q? code = _thecodeyouputinthetextbox_» и дает мою страницу-заполнитель/показ. Что-то не так в моих маршрутах или форме, что приводит к тому, что он всегда переходит на эту страницу, игнорируя любые попытки перенаправления или проверки ошибок. –

+0

выполните «rake routes» в корневом проекте и покажите результат. – kalelc

+0

Я обновлю свой вопрос –