Ruby on rails Rails路由器中的变量根

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

我已经使用不同的技术完全重新编写了我们的单页应用程序(SPA),但是我希望他们在对每个用户强制执行新UI之前,选择尝试新UI,并同样切换回旧UI,而不是对所有用户强制执行新UI。新的用户界面是按照这一点编写的,但是在
routes.rb
中,我需要手动定义
root
来选择其中一个。例:

root :to => 'dash#new' # for new UI

如何自动实现这一点?比如:

user.newui ? 'dash#new' : 'dash#old'
  • 默认根目录将是
    'dash#old'
  • 当用户选择尝试新UI时,它应该存储在用户模型中的新字段中。(说
    user.newui=true
  • 根据
    user.newui
    root的值。比如:

    user.newui ? 'dash#new' : 'dash#old'
    
    然而,这显然是不可能的。我在routes中没有任何用户对象,很可能我的整个解决方案都指向南方。有人可以指导我如何实现这一点,或者什么是最佳实践吗


    • 您最好在控制器中更改,而不是在中间件中更改

      #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抱歉,我指的是单页应用程序。我必须处理一些其他事情,但总的来说这似乎有效。谢谢你给我指出了正确的方向:)