Basic routing question

Hi, I’m learning about routing and trying to solve the problem below.
Using update_scope_path in the view is routing to “users/show” rather
than users/update_scope, with “update_scope” becoming the user id.

( The goal is to change session[:question_scope] to “vip” when the user
clicks the button in the view. I assume I have to go to a controller
action to do that.)

In routes.rb:
authenticated :user do
root :to => ‘users#show’
end
resources :users
match ‘/users/update_scope’, :to => ‘users#update_scope’, :as =>
:update_scope

In users_controller:
def update_scope
session[:question_scope] = “vip”
end

In users/show:
<%= link_to ‘Go’, update_scope_path, :class => ‘btn btn-mini’ %>

View source:
Go

In debug params:
— !ruby/hash:ActiveSupport::HashWithIndifferentAccess
action: show
controller: users
id: update_scope

I would suggest doing this.

resources :users
scope ‘/users’ do
put ‘update_scope’, to: ‘users#update_scope’, as: :update_scope
end

That might work. What I’d honestly consider is making a scope controller
and using the update action. If you don’t need the others, then your
routes
will look like this.
resources :users do
resources :scopes, only: [ :update ]
end

~Johnneylee

So I can’t create an action in any controller that sets the session
variable and then call it through the route?

Can you tell me why it is going to users
/show instead of users/update_scope?

In other words, why doesn’t :to => ‘users#update_scope’ route to the
update_scope action of the users controller?

I am trying to understand how this works as well as get it working…

Thanks!

On Sat, Feb 2, 2013 at 6:35 AM, Dave C. [email protected]
wrote:

Using update_scope_path in the view is routing to “users/show” rather
than users/update_scope, with “update_scope” becoming the user id.

( The goal is to change session[:question_scope] to “vip” when the user
clicks the button in the view. I assume I have to go to a controller
action to do that.)

Yes.

In routes.rb:

resources :users

The above includes /users/:id, which matches first - winning! So
the routing engine won’t ever get to your other route.

match ‘/users/update_scope’

Reverse the order in routes.rb and try it.


Hassan S. ------------------------ [email protected]

twitter: @hassan

Thank you!