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:
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' %>

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?

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

Thanks!

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.

Thank you!