ruby on rails - How do I route search form to controller method that redirects to /show? -
i still new rails , trying tackle understand little bit higher level. application needs accept code input user (a hashed event code unique event) , redirect them specific event's show page if found. if not found, displays error div.
instead of throwing error whenever test it, should, points me generic /show page. have pieced dozen other stack posts , tutorials , not single 1 has demonstrated kind of functionality need. need when form submits, needs running in controller trying .find specific object, , if successful runs redirect it. when troubleshooting yanked out redirect line in controller , found wasn't running, else pointing /show. how form ask method do? custom route right way go?
right now, form looks this:
<h2><br/>input 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>` my controller in entirety this:
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 and far relevant parts of routes go:
resources :event resources :room end 'event/:event_code' => 'event#lookup', as: :lookup rake routes:
prefix verb uri pattern controller#action welcome_index /welcome/index(.:format) welcome#index root / welcome#index event_room_index /event/:event_id/room(.:format) room#index post /event/:event_id/room(.:format) room#create new_event_room /event/:event_id/room/new(.:format) room#new edit_event_room /event/:event_id/room/:id/edit(.:format) room#edit event_room /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 /event(.:format) event#index post /event(.:format) event#create new_event /event/new(.:format) event#new edit_event /event/:id/edit(.:format) event#edit event /event/:id(.:format) event#show patch /event/:id(.:format) event#update put /event/:id(.:format) event#update delete /event/:id(.:format) event#destroy lookup /event/:event_code(.:format) event#show
solution:
app/views/events/index.html.erb
<h2><br/>input 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 error --> <% end %> have @ this
config/routes.rb
event /event/:id(.:format) event#show ..... lookup /event/:event_code(.:format) event#show the routes repeated. rename lookup show. remove lookup route.
Comments
Post a Comment