Forum: Ruby on Rails Basic routing question

Posted by Dave Castellano (dcastellano1)
on 2013-02-02 15:35
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:
 <a href="/update_scope" class="btn btn-mini">Go</a>

In debug params:
--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
action: show
controller: users
id: update_scope
Posted by Johnneylee Rollins (Guest)
on 2013-02-02 16:07
(Received via mailing list)
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
Posted by Dave Castellano (dcastellano1)
on 2013-02-02 16:56
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!
Posted by Hassan Schroeder (Guest)
on 2013-02-02 17:16
(Received via mailing list)
On Sat, Feb 2, 2013 at 6:35 AM, Dave Castellano <lists@ruby-forum.com> 
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 Schroeder ------------------------ hassan.schroeder@gmail.com
http://about.me/hassanschroeder
twitter: @hassan
Posted by Dave Castellano (dcastellano1)
on 2013-02-02 17:36
Thank you!
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.