Rub*_*tic 17 split routes ruby-on-rails-4
我想在rails 4应用程序中拆分我的路由.对于rails 3,问题已被回答了几次,例如:
在rails 4中执行此操作的正确方法是什么?如何控制路由加载的顺序?
建议从rails 3问题:
application.rb中
config.paths['config/routes'] = Dir["config/routes/*.rb"]
Run Code Online (Sandbox Code Playgroud)
失败:
/Users/jordan/.rvm/gems/ruby-2.0.0-head@books/gems/railties-4.0.0/lib/rails/application/routes_reloader.rb:10:in,scue in execute_if_updated':Rails :: Application :: RoutesReloader #cute_if_updated委托给updater.execute_if_updated,但updater为nil:
@route_sets = [#]>(RuntimeError)
cut*_*ion 18
我这样管理:
# config/application.rb
config.autoload_paths << Rails.root.join('config/routes')
# config/routes.rb
Rails.application.routes.draw do
root to: 'home#index'
extend ApiRoutes
end
# config/routes/api_routes.rb
module ApiRoutes
def self.extended(router)
router.instance_exec do
namespace :api do
resources :tasks, only: [:index, :show]
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
在这里,我将config/routes
目录添加到其中定义的自动加载模块中.这将确保在这些文件更改时重新加载路由.
用于extend
将这些模块包含在主文件中(它们将被自动加载,无需使用它们).
使用instance_exec
inside self.extended
在路由器的上下文中绘制路由.
派对有点晚了,但你可以在Rails 4中通过猴子修补你的routes.rb文件顶部的映射器来做到这一点.即:
# config/routes.rb
class ActionDispatch::Routing::Mapper
def draw(routes_name)
instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb")))
end
end
Run Code Online (Sandbox Code Playgroud)
然后使用draw
routes.rb中的方法:
Rails.application.routes.draw do
draw :api
end
Run Code Online (Sandbox Code Playgroud)
这将期望config/routes/api.rb中的文件.
稍微更全面的解释,这里有分割路径文件的例子.
归档时间: |
|
查看次数: |
6259 次 |
最近记录: |