【问题标题】:What is a good way to break your routes.rb file into multiple files for better management?将您的 routes.rb 文件分成多个文件以便更好地管理的好方法是什么?
【发布时间】:2010-11-08 15:09:51
【问题描述】:

我正在开发一个带有相当大的路由文件的 rails 3 项目。它利用了一些嵌套,我遇到了一个问题,主要是因为路由文件难以管理。

有没有办法把它分成多个文件?

类似:

My::Application.routes.draw do
  constraints(:subdomain => 'admin') do
    include My::Application::Routes::AdminRoutes
  end

  include My::Application::Routes::MainRoutes
end

或者……

My::Application.routes.draw do
  constraints(:subdomain => 'admin') do
    require 'routes/admin_routes.rb'
  end

  require 'routes/main_routes.rb'
end

或者类似的东西。

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby routes partitioning


    【解决方案1】:

    include 将包含模块的方法插入命名空间,require 只是将文件加载到顶级命名空间。这些都不适合你。

    只需load 单独的文件

    My::Application.routes.draw do
      constraints(:subdomain => 'admin') do
        load 'routes/admin_routes.rb'
      end
    
      load 'routes/main_routes.rb'
    end
    

    【讨论】:

    • 对我来说看起来很酷。我们将试一试,看看这会将我们带向何方。
    • 'routes/admin_routes.rb' 文件应该是什么样子的?我们在尝试不同的事情时遇到了一些问题。它只需要包装在一个模块中吗?
    • 据我所知,它是在上下文中进行评估的,所以如果你没有将它分成单独的文件,它应该只包含其中的任何内容。
    【解决方案2】:

    你可以使用的另一个选项

    ActionController::Routing::Routes.draw do |map| #routes.rb
    
      extend NewConnections
    
      some_method(map)  
    
    end 
    
    
    module NewConnections #/lib/new_connections.rb
    
      def some_method(clazz)
        clazz.root :controller => "demo"
      end
    
    end
    

    这会将您的应用程序的根连接到默认控制器

    【讨论】:

    • 这对 Rails 2.x 路由很有用。它仍然适用于 Rails 3.0,但不推荐使用 map,它将在 3.1+ 上失败
    猜你喜欢
    • 1970-01-01
    • 2017-04-15
    • 2010-11-04
    • 1970-01-01
    • 2015-02-01
    • 2020-11-13
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多