I am quite new to Rails3, I basically created a subscribers
scaffolding, I only want my app to respond to new
and create
actions.
So in config/routes.rb
I defined:
resources :subscribers, :only => [:new, :create]
Which works this way
GET /subscribers => subscribers#new POST /subscribers => subscribers#create
Now I want my app to exhibit the subscribers resources at /
(root) instead of /subscribers
, so here is what I did:
match '/' => "subscribers#new" match '/' => "subscribers#create" match '/' => "subscribers#thankyou" resources :subscribers, :only => [:new, :create]
Which somehow works, but is probably not the DRYest thing: here are the issues I have:
/subscribers
URL instead of just /
, the form is created using the form_for(@subscriber)
helper method, so the path
helper must be somehow unaffected by the route/subscribers
/
, and then doing a refresh when the connection comes back (browser ask for resubmitting => OK), the Rails app crashes (I don't have the error stack though as this was on production), why is that?Also, I tried setting up the route this way:
resources :subscribers, :only => [:new, :create] do collection do post '/' => :create get '/' => :new end end
Which is probably DRYer, but it doesn't fix any of these issues.
I am sure this is something quite simple, please help!
Thank you for your answers, it helped me find the exact solution to my question:
resources :subscribers, :only => [:new, :create], :path => '', :path_names => {:new => ''}
Tested and working on Rails 3 :)
You could do
resources :subscribers, :path => ''
and make sure that GET /
is being served by your root template, e.g. by adding this to SubscribersController:
def index
render 'welcome/index'
end
I experimented with using a match "/"
declaration to override the resource index action and map it to another controller instead but apparently a resources
declaration is always fully overriding manually declared routes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With