Ruby on rails Rails路由器中的变量根
我已经使用不同的技术完全重新编写了我们的单页应用程序(SPA),但是我希望他们在对每个用户强制执行新UI之前,选择尝试新UI,并同样切换回旧UI,而不是对所有用户强制执行新UI。新的用户界面是按照这一点编写的,但是在Ruby on rails Rails路由器中的变量根,ruby-on-rails,routes,Ruby On Rails,Routes,我已经使用不同的技术完全重新编写了我们的单页应用程序(SPA),但是我希望他们在对每个用户强制执行新UI之前,选择尝试新UI,并同样切换回旧UI,而不是对所有用户强制执行新UI。新的用户界面是按照这一点编写的,但是在routes.rb中,我需要手动定义root来选择其中一个。例: root :to => 'dash#new' # for new UI 或 如何自动实现这一点?比如: user.newui ? 'dash#new' : 'dash#old' 默认根目录将是'dash#o
routes.rb
中,我需要手动定义root
来选择其中一个。例:
root :to => 'dash#new' # for new UI
或
如何自动实现这一点?比如:
user.newui ? 'dash#new' : 'dash#old'
- 默认根目录将是
'dash#old'
- 当用户选择尝试新UI时,它应该存储在用户模型中的新字段中。(说
)user.newui=true
- 根据
root的值。比如:user.newui
然而,这显然是不可能的。我在routes中没有任何用户对象,很可能我的整个解决方案都指向南方。有人可以指导我如何实现这一点,或者什么是最佳实践吗user.newui ? 'dash#new' : 'dash#old'
- 您最好在控制器中更改,而不是在中间件中更改
#config/routes.rb
root "dash#index"
#app/controllers/dash_controller.rb
class DashController < ActionController::Base
before_action :authenticate_user!, :set_layout
def index
current_user.newui?
# define data
else
# old data
end
end
private
def set_layout
layout (current_user.newui? "new" : "old")
end
end
#config/routes.rb
根“破折号#索引”
#app/controllers/dash_controller.rb
类DashController
你必须记住,你的“路线”就像一个菜单——你选择你想要的并浏览到它 从这些路由发送的内容完全取决于控制器。在这两种情况下,您都试图调用
dash#index
操作;您要做的是确定用户是否对如何显示有不同的偏好
因为中间件是用来处理请求的(它不知道
用户
),所以最好使用控制器进行更改。如果路由中有用户对象,这将非常容易
像Desive gem这样的东西会从盒子里给你。它还允许您为用户模型定义布尔触发器
例如,我有一个默认的FalseAdmin标记,它实际上改变了路由。Desive模型总是自动为您提供路线,所以如果您生成
rails g Desive User您将拥有Desive_for:您可以在路线中使用的用户
devise_for :admin do
root to: "admin#index"
end
root to: "home#index"
在没有用户模型的情况下,您仍然可以在controller中定义根,但如何为每个用户持久化根呢 什么是SPA,我以前没听说过?@RichardPeck抱歉,我指的是单页应用程序。我必须处理一些其他事情,但总的来说这似乎有效。谢谢你给我指出了正确的方向:)