在模块化Sinatra应用程序中,config.ru文件中包含以下代码:
# ...
map '/' do
run MyApp::Controller::WelcomesController
run MyApp::Controller::Authenticated::Foo::HomesController
run MyApp::Controller::Authenticated::Foo::SearchesController
end
# ...
Run Code Online (Sandbox Code Playgroud)
以及控制器文件,例如Homes controller:
# app/controllers/authenticated/foo/homes_controller.rb
require_relative 'base'
module MyApp
module Controller
module Authenticated
module Foo
class HomesController < Foo::Base
get '/Users/Foos' do
haml 'authenticated/foo/homes/show'.to_sym
end
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
搜索控制器:
# app/controllers/authenticated/foo/searches_controller.rb
require_relative 'base'
module MyApp
module Controller
module Authenticated
module Foo
class SearchesController < Student::Base
get '/Users/Foos/Searches' do
haml 'authenticated/foo/searches/index'.to_sym
end
get '/Users/Foos/Searches/:id' do
haml 'authenticated/foo/searches/show'.to_sym
end
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
欢迎控制器:
# app/controllers/welcomes_controller.rb
require_relative 'base'
module MyApp
module Controller
class WelcomesController < Base
get '/' do
haml 'welcomes/show'.to_sym, layout: false
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但似乎这些控制者的路线之间存在冲突。
例如,如果我评论了HomesController和SearchesController,则WelcomesController的路线可用(200)。但是其他两个控制器的路由不可访问(404)。
如果我取消注释的3行,则config.ru只有这3个控制器之一的路由可用。
有解决此问题的技巧吗?非常感谢!
您run每人只得到一个map。添加更多maps,或者您可以尝试Rack :: Cascade:
run Rack::Cascade.new([
MyApp::Controller::WelcomesController,
MyApp::Controller::Authenticated::Foo::HomesController,
MyApp::Controller::Authenticated::Foo::SearchesController,
])
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您不会因为嵌套名称空间而获奖-它是Ruby,而不是Java;)
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |