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?
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:
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?