wal*_*.ar 4 ruby-on-rails devise ruby-on-rails-3
我有三个独立的设计模型,我有三个不同的sign_in屏幕.这三个人都有一个仪表板:
devise_for :md1
devise_for :md2
devise_for :md3
match 'md1/dashboard' => 'md1#dashboard', :via => :get
match 'md2/dashboard' => 'md2#dashboard', :via => :get
match 'md3/dashboard' => 'md3#dashboard', :via => :get
Run Code Online (Sandbox Code Playgroud)
我希望当有一个mdX成功登录时,它会重定向到mdX#dashboard,如果有可能通过GET.我试过了:
devise_scope :md1 do
root :to => 'md1#dashboard'
end
devise_scope :md2 do
root :to => 'md2#dashboard'
end
devise_scope :md3 do
root :to => 'md3#dashboard'
end
Run Code Online (Sandbox Code Playgroud)
然后当我用md1成功登录时,我被重定向到md1仪表板,但是当我成功登录md2时,我被重定向到md1的sign_in屏幕.然后我尝试了:
def after_sign_in_path_for resource
dashboard_path resource
end
Run Code Online (Sandbox Code Playgroud)
但是没有这样的方法.有没有一种简单的方法可以做到这一点,或者必须与if每个模型的语句一起使用?
一些路线可以更好地理解和获取更多信息以获得更好的解决方案
md1_dashboard GET /md1/dashboard(.:format) md1#dashboard
md2_dashboard GET /md2/dashboard(.:format) md2#dashboard
md3_dashboard GET /md3/dashboard(.:format) md3#dashboard
Run Code Online (Sandbox Code Playgroud)
提前致谢
当你写这篇文章时:
devise_scope :md1 do
root :to => 'md1#dashboard'
end
devise_scope :md2 do
root :to => 'md2#dashboard'
end
devise_scope :md3 do
root :to => 'md3#dashboard'
end
Run Code Online (Sandbox Code Playgroud)
您正在定义三个具有相同名称的根路由.由于它们冲突,只会使用第一个.这就是为什么只有md1工作的原因.你可能想写这个:
scope :md1 do
root :to => 'md1#dashboard'
end
scope :md2 do
root :to => 'md2#dashboard'
end
scope :md3 do
root :to => 'md3#dashboard'
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您将在三个不同的范围定义三个不同的根路由(rake routes再次检查).注意scope是一个路由器方法,它定位你的路由,devise_scope不限制任何路由,它只是告诉你想要使用哪个设计范围,除非Devise明确要求你这样做(你知道它什么时候),你不需要告诉它.
在此更改之后,一切都应该按预期工作.需要注意的是制定默认使用#{scope}_root_path成功后签收重定向,这就是为什么上述工程的代码(检查rake routes,你会看到你md1_root,md2_root等现在被定义).
| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |