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

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
3ff9c2544554b13c6c7877e76684751b?d=identicon&s=25 Lee Smith (smitjel)
on 2009-03-07 08: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
  begin
    @ticket = Ticket.find(params[:id])

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

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

<% form_tag ticket_path, {:id => 'jumpbox', :method => :get} do %>
  <p>
    <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 %>
  </p>
<% end %>

Thanks for any help!
6fabb84e727dee98d1277df56458cbac?d=identicon&s=25 Andrew Bloom (Guest)
on 2009-03-07 08:34
(Received via mailing list)
ticket_path is expecting you to pass the ID of the ticket you are
looking for. Something like this:
ticket_path(123)

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

What you need is something like this:

# tickets_controller
def search
  show
end

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

You can now GET or POST to /tickets/search or tickets_search_path.
3ff9c2544554b13c6c7877e76684751b?d=identicon&s=25 Lee Smith (smitjel)
on 2009-03-07 09: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
work.

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

Thanks for the help.
3ff9c2544554b13c6c7877e76684751b?d=identicon&s=25 Lee Smith (smitjel)
on 2009-03-12 19: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 method...it'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.