S_Ahmed
(S Ahmed)
September 20, 2012, 1:32am
1
I have a controller:
class HomeController < ApplicationController
def index
end
def about
end
def contact
end
def terms
end
def privacy
end
end
My routes.rb has:
resources :home do
member do
get ‘about’
get ‘contact’
get ‘terms’
get ‘privacy’
end
end
In my application.html.erb I have:
About
It seems to be expecting an id?
I’m getting the error:
No route matches {:action=>"about", :controller=>"home"}
Rake routes shows:
about_home GET /home/:id/about(.:format) home#about
Maybe it could be a inflection problem:
“home”.pluralize
“homes”
The convention is that a controller is the pluralized name of the model.
S_Ahmed
(S Ahmed)
September 20, 2012, 1:59am
4
Thanks, that worked. Although it doesn’t make sense, it isnt’ a colleciton so I guessed to use member.
BTW, how could I match this:
/home/some-name-here
Where ‘some-name-here’ is the parameter (id), and I want to call home#show
You can use
match ‘home/:page’ => ‘home#page’ <<<< before
resources :home <<<< after
home_controller
def page
use params[:page]
end
Rails routes are matched in the order they are specified, so if you have a resources :photos
above a get 'photos/poll'
the show
action’s route for the resources
line will be matched before the get
line. To fix this, move the get
line above the resources
line so that it is matched first.
http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions
You can use
match ‘home/:page’ => ‘home#page’ <<<< before
resources :home <<<< after
this isn’t advisable. home/:page will match home/1
Not if defined before the resource.
Not if defined before the resource.
i’m not saying that it won’t work. i’m saying that it’s not good practice. i would’ve agreed
with your method if you added constraints to values of the :page parameter.
hummm… really, I agree with you.