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
on 2013-02-02 15:35
on 2013-02-02 16:07
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
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!
on 2013-02-02 17:16
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
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
Log in with Google account | Log in with Yahoo account
No account? Register here.