4

我得到了三个独立的设计模型,因此我得到了三个不同的登录屏幕。这三个都有一个仪表板:

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

我希望当 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

然后,当我使用 md1 成功登录时,我被重定向到 md1 仪表板,但是当我使用 md2 成功登录时,我被重定向到 md1 的 sign_in 屏幕。然后我尝试了:

def after_sign_in_path_for resource
  dashboard_path resource
end

但是没有这样的方法。有没有一种简单的方法可以做到这一点,或者它必须与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

提前致谢

4

1 回答 1

6

当你写这个时:

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

您正在定义三个具有相同名称的根路由。由于它们有冲突,因此只使用第一个。这就是为什么只有 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

在这种情况下,您将在三个不同的范围内定义三个不同的根路由(rake routes再次检查)。注意scope是一种路由方法,它限制您的路由,devise_scope不限制任何路由,它只是告诉您要使用哪个设计范围,除非设计明确要求您这样做,否则您不需要告诉您(您会知道什么时候这样做)。

进行此更改后,一切都应按预期工作。请注意,默认情况下,Devise#{scope}_root_path在成功登录后使用重定向,这就是上面的代码有效的原因(检查rake routes,你会看到你md1_root,,md2_root等现在已定义)。

于 2012-07-28T10:42:58.783 回答