2013-03-01 60 views
0

我正在使用Devise进行用户身份验证,并希望让用户重定向到我为用户类名为“myaccount”设置的自定义动作。但是,我无法获得正确的语法 - 我尝试的所有内容都会出现各种错误。设计重定向到登录时的自定义动作

此代码可能会告诉你什么是我想要acheive(它不工作虽然):

def after_sign_in_path_for(resource) 
    redirect_to :controller => 'users', :action => 'myaccount', :id => current_user.id and return 
    end 

而且路线:

devise_for :users, :controllers => { :registrations => "registrations" } 

    devise_for :users 

    resources :users do 
    member do 
     get 'myaccount' 
    end 
    end 

道歉,它可能是一个相当新手问题 - 但我该如何改变我的重定向,或添加一个新的路由,例如user_sign_in_path会起作用吗?

谢谢!

UPDATE:

如果任何人发现这个问题,这是对我工作:

url_for :controller => '/users', :id => current_user.id, :action => 'myaccount' 

这是正确的顺序,我需要它,我不得不把一个斜线盈的控制器名称,使其使用它而不是Devise控制器。

+0

你可以看一下https://开头github上。 com/plataformatec/devise/wiki /方法: - 重定向到特定页面 - 成功登录以获得更详细的补充。我希望它有帮助 – Aleks 2013-03-01 11:54:41

+0

我曾经看过,但它并没有给我以后的语法。对于任何人发现这个问题,这个页面:http://apidock.com/rails/ActionController/Base/url_for给了我一些细节,我需要做什么 - 即把斜杠放在控制器名称之前。 – ecs 2013-03-01 12:11:10

回答

0

你不必调用redirect_to

def after_sign_in_path_for(resource) 
    { controller: 'users', action: 'myaccount', id: current_user.id } 
end 

如果还是不行,那包裹起来url_for这应该工作:)

+0

尝试了两种方法,并获得了与之相同的结果。我已经添加了一个更新的问题 - 它是如何来试图使用设计控制器,而不是我指定的?谢谢。 – ecs 2013-03-01 12:07:38

+0

没关系,得到它 - 需要在控制器名称前加一个斜杠。谢谢你的帮助! – ecs 2013-03-01 12:08:49

+0

你实际上可以使用'myaccount_user_path(current_user)' – jvnill 2013-03-01 12:16:54