ruby-on-rails-3 - Rails 路由缓存在变量中

标签 ruby-on-rails-3 lambda routes

如何使用 lambda 将路由缓存到变量中,但如何在路由 block 之外创建它?

在调用routes.rb block 之前加载的somefile.rb:

x = lambda do
  namespace :test do

    root to: 'application#index'

    get 'page/:page', to: 'pages#show', as: :page

  end
end

路线.rb:

Rails.application.routes.draw do

  x.call if yep

end

由于某些 DSL 类加载错误,这样的代码不起作用。我不太明白作用域在 block 内是如何工作的。

最佳答案

您可以直接将 lambda 传递给 draw 方法:

# config/routes.rb
conditional_routes = lambda {
  namespace :test do
    root to: 'application#index'
    match 'page/:page' => 'pages#show', as: :page
  end
}

TestApp::Application.routes.draw do
  # default routes
end

TestApp::Application.routes.draw(&conditional_routes) if yep

在此示例中,我在同一个文件 (config/routes.rb) 中定义 lambda,但您可以将其放入初始值设定项、库文件或任何您喜欢的位置:

# config/initializers/conditional_routes.rb
module ConditionalRoutes
  def self.routes
    lambda {
      # ...
    }
  end
end

# config/routes.rb
TestApp::Application.routes.draw(&ConditionalRoutes.routes)

关于ruby-on-rails-3 - Rails 路由缓存在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11941642/

相关文章:

ruby-on-rails - 如何在 mongoid 中使用 AND 条件进行查询

ruby-on-rails - 铁路路线 : Namespace with Variables

c++ - 为什么 lambda 表达式不需要 <functional>,而 function<void()> 需要?

amazon-web-services - 如何在 lambda 中运行同步 dynamodb 请求?

c++ - 没有与 lambda 匹配的函数 std::forward

scala - 如何迭代 playframework 2 scala 应用程序中的路由?

javascript - 在 React 中实现硬重载

ruby-on-rails - Heroku帮助部署使用Mysql数据库的Rails应用程序

ruby-on-rails - Rails - 给定一组用户 - 如何仅获得电子邮件的输出?

ruby-on-rails - Rails 3.2 以前在 words 方法中返回 html 内容