Forum: Ruby on Rails Simple search form with restful routes?

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Lee S. (Guest)
on 2009-03-07 09:05
What am I doing wrong?  I just want to create a simple form where I can
enter the ID of a model and it take me to that model.  I'm trying to
place the form in the application layout, so I can use it from anywhere
in my app.  I'm using restful routes only.  I keep getting this routing
error when trying to create the form:

ticket_url failed to generate from {:controller=>"tickets",
:action=>"show"} - you may have ambiguous routes, or you may need to
supply additional parameters for this route.

Here's my resource declaration (routes.rb):

map.resources :tickets

Here's my "show" method in tickets_controller:

def show
    @ticket = Ticket.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @ticket }
  rescue ActiveRecord::RecordNotFound
    logger.error("Attempt to access invalid ticket_id =>
    flash[:warning] = "You have requested an invalid ticket."
    redirect_to tickets_path

Here's the form_tag I'm trying to use:

<% form_tag ticket_path, {:id => 'jumpbox', :method => :get} do %>
    <label for="id"><em>Enter a ticket number:</em></label><br/>
    <%= text_field_tag 'id', nil, :size => 8, :class => "textbox" %>
    <%= submit_tag 'Go', :name => nil %>
<% end %>

Thanks for any help!
Andrew B. (Guest)
on 2009-03-07 09:34
(Received via mailing list)
ticket_path is expecting you to pass the ID of the ticket you are
looking for. Something like this:

Run 'rake routes' to get a good idea of what each named route is

What you need is something like this:

# tickets_controller
def search

# routes.rb
map.resources :tickets, :collection => { :search => :post }

You can now GET or POST to /tickets/search or tickets_search_path.
Lee S. (Guest)
on 2009-03-07 10:02
(Received via mailing list)
Yeah, I ran 'rake routes' to study the routing but I just didn't think
I'd have to add to it.  I specified the 'get' method to ticket_path
with an ID param coming in...I don't understand why that wouldn't

So the search method will now render the show method? or redirect_to?
or what?

Thanks for the help.
Lee S. (Guest)
on 2009-03-12 20:42
After updating my tickets resources in my routing config like Andrew
suggested, does anyone know how I might pass the :id param to the show
method from the new search method so I don't have to re-write the code
in the show method?  All I want to do is reuse the show's
doing exactly what I want my search method to do.  Thanks for any help!
This topic is locked and can not be replied to.