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

Popular posts from this blog

authentication - Mongodb revoke acccess to connect test database -

r - Update two sets of radiobuttons reactively - shiny -

ios - Realm over CoreData should I use NSFetchedResultController or a Dictionary? -