Forum: Ruby on Rails redirecting to a different controller from a search box

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.
242dfb8324501cb3b020625639044377?d=identicon&s=25 Vahagn Hayrapetyan (vahagn)
on 2008-11-12 15:35
(Received via mailing list)
Hi,-

I have a main page with a search box. When the user enters a query and
hits "Search" I want to redirect him to another page (another
controller with a search action), and display the results on that
page. My form looks like this:

    <% form_tag({:controller => "projects", :action =>
"search"}, :method => "get") do %>
        <label for ="q">Enter search phrase: </label>
        <%= text_field_tag "q", params[:q] %>
        <input type ="submit" value="Go" />
    <% end %>

The error I get is:

 ActiveRecord::RecordNotFound in ProjectsController#show

Couldn't find Project with ID=search

How do I override the default route for this, so it doesn't think
search is an id?

http://localhost:3000/projects/search?q=foo ?

Thanks.
280b78a61a968391b7e07e912be102a8?d=identicon&s=25 Robert Walker (robert4723)
on 2008-11-12 16:11
> How do I override the default route for this, so it doesn't think
> search is an id?

I can think of a few solutions to this. One way would be to add a named
route above your resource route:
map.projects_search 'projects/search', :controller => 'project_search',
:action => 'search'

Another possible way would be to use conditions on your existing route
mapping, but I'm not expert enough in routing to tell you how to do
that.

That being said, do you really need your search action to be moved out
to a different controller? Maybe you do, and that's fine, but I wanted
to get you to think about whether it's really necessary. Instead you
could just add a custom action to your existing projects controller:

map.resources :projects, :collection => { :search => :get }
C5c0e0499446b84fd3bcc61cf7862539?d=identicon&s=25 Thani Ararsu (thaniyarasu)
on 2008-11-12 16:11
Vahagn Hayrapetyan wrote:
> Hi,-
>
> I have a main page with a search box. When the user enters a query and
> hits "Search" I want to redirect him to another page (another
> controller with a search action), and display the results on that
> page. My form looks like this:
>
>     <% form_tag({:controller => "projects", :action =>
> "search"}, :method => "get") do %>
>         <label for ="q">Enter search phrase: </label>
>         <%= text_field_tag "q", params[:q] %>
>         <input type ="submit" value="Go" />
>     <% end %>
>
> The error I get is:
>
>  ActiveRecord::RecordNotFound in ProjectsController#show
>
> Couldn't find Project with ID=search
>
> How do I override the default route for this, so it doesn't think
> search is an id?
>
> http://localhost:3000/projects/search?q=foo ?
>
> Thanks.

you are useing get method
so the action name will passed as params[:id]
just remove get method
then try
This topic is locked and can not be replied to.