# Simple search form with restful routes?

**URL:** <https://www.ruby-forum.com/t/simple-search-form-with-restful-routes/162235>\
**Category:** Rails\
**Created:** [March 7, 2009, 8:05am UTC](https://www.ruby-forum.com/t/simple-search-form-with-restful-routes/162235 "2009-03-07T08:05:35Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![coolmenu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/eada6e/32.png) [@coolmenu](https://www.ruby-forum.com/u/coolmenu)\
**Post date:** [March 7, 2009, 8:05am UTC](https://www.ruby-forum.com/t/simple-search-form-with-restful-routes/162235/1 "2009-03-07T08:05:35Z")

</div>

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 %\>

_Enter a ticket number:_  
 \<%= text\_field\_tag 'id', nil, :size =\> 8, :class =\> "textbox" %\> \<%= submit\_tag 'Go', :name =\> nil %\>

\<% end %\>

Thanks for any help!

---

<div class="post-metadata">

**Author:** ![coolmenu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/eada6e/32.png) [@coolmenu](https://www.ruby-forum.com/u/coolmenu)\
**Post date:** [March 7, 2009, 8:34am UTC](https://www.ruby-forum.com/t/simple-search-form-with-restful-routes/162235/2 "2009-03-07T08:34:18Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![coolmenu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/eada6e/32.png) [@coolmenu](https://www.ruby-forum.com/u/coolmenu)\
**Post date:** [March 7, 2009, 9:02am UTC](https://www.ruby-forum.com/t/simple-search-form-with-restful-routes/162235/3 "2009-03-07T09:02:26Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![coolmenu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/eada6e/32.png) [@coolmenu](https://www.ruby-forum.com/u/coolmenu)\
**Post date:** [March 12, 2009, 7:42pm UTC](https://www.ruby-forum.com/t/simple-search-form-with-restful-routes/162235/4 "2009-03-12T19:42:57Z")

</div>

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!
