gpt4 book ai didi

ruby-on-rails - 如何将多个设备型号重定向到多个特定网址?

转载 作者:行者123 更新时间:2023-12-03 00:29:13 25 4
gpt4 key购买 nike

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

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 的登录屏幕。然后我尝试了:

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

提前致谢

最佳答案

当你写这篇文章时:

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 paths)。注意 scope 是一个路由器方法,用于限制路由的范围,devise_scope 不限制任何路由的范围,它只是告诉您要使用哪个设备范围,而您不需要告诉你,除非 Devise 明确要求你这样做(你会知道什么时候)。

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

关于ruby-on-rails - 如何将多个设备型号重定向到多个特定网址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11690516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com