如何使用 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/