what does :new => {:start => :get} mean in routes?

Hey all,

I'm looking at this route below:

map.resources :sessions, :member => {:validate => :get}, :new => {:start => :get}, :only => %w(create new)

It's clear the sessions has the 7 restful routes but each member of a collection of records can also be influenced by the validate method. Then I come across this line:

:new => {:start => :get}, :only => %w(create new)

and I'm not sure what this is doing.

The sessions controller has these two methods:

  def new     redirect_to start_new_session_path and return if current_user     flash.now[:alert] = params[:error] if params[:error]     flash.now[:notice] = params[:notice] if params[:notice]   end

  def start   end

Thanks for response.

I believe you only have two restful routes (create and new) because of the line:

    :only => %w(create new)

And the start action is defined as an alternative new action here, probably because the original author wanted a GET instead of POST (/ sessions/start):

    :new => {:start => :get}

Based on the SessionController it looks like you may have more routes then you are actually using.

M Daubs wrote in post #995201:

I believe you only have two restful routes (create and new) because of the line:

    :only => %w(create new)

And the start action is defined as an alternative new action here, probably because the original author wanted a GET instead of POST (/ sessions/start):

    :new => {:start => :get}

Based on the SessionController it looks like you may have more routes then you are actually using.

Thanks for response. I'm not understanding why someone may need to pass an alternative new action, when both the new and start are declared as methods in sessions controller. If the reason is because these are two kinds of 'new' actions that have different purposes, then why does start method silently return null since it doesn't contain any functionality within its scope? Maybe the answer isn't possible given the context I provided but in general terms, why might it be done?

Thanks for response.

Unless your routes file has a default :controller/:action route then the start action would be unroutable without that entry. It could even be redundant or unused.

The start method may return nil but the sessions/start view will still render (if it exists).

Hi, John

Obviously

map.resources :sessions, :member => {:validate => :get}, :new => {:start => :get}, :only => %w(create new)

creates new route for you like the one you have in new method

redirect_to start_new_session_path and return if current_user

If you had

map.resources :sessions, :member => {:validate => :get}, :new => {:finish => :get, :brand => :get}, :only => %w(create new)

then the new routes would have been:

redirect_to finish_new_session_path and return if current_user

and

redirect_to brand_new_session_path and return if current_user

Makes sense?

Obviously

map.resources :sessions, :member => {:validate => :get}, :new => {:start =>

:get}, :only => %w(create new) creates new route for you like the one you have in new method

redirect_to start_new_session_path and return if current_user

Thanks for response. I do notice this:

form_tag sessions_path

creates sessions/create

and so when the form is posted, create method of sessions controller is executed.

One thing though. How does it know to post to create if it just says sessions_path and not create_sessions_path? Since there is only a new and create action, it just assumes that since a form is being posted, you must want it to go to create?

Thanks for response.