concern :votable do
resources :votes, only: [:index, :create]
end
namespace :api, defaults: {format: :json} do
namespace :v1 do
namespace :problems do
resources :details, only: [:index, :show], concerns: :votable
我的route.rb如上,我把VotesController放在api\v1\votes_controller.rb
。类名是Api::V1::VotesController
它可以在我的本地计算机(Windows 7, ruby 2.0.0p481 (2014-05-08) [i386-mingw32], Rails 4.1.5
)上正常运行,但是在Heroku(ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-linux], Rails 4.1.5
)上的运行方式却有所不同。从日志中,似乎希望将VotesController放在其中api\v1\problems\votes_controller.rb
错误日志:
ActionController::RoutingError (uninitialized constant Api::V1::Problems::VotesController):
它是已知的错误吗?如果我想使votes_controller.rb不在Api :: V1 :: Problems命名空间之内,该如何配置?
我希望它是通用的并且可被任何其他控制器重用,因此避免将其放在api:v1:problems目录下。
将您的路线更改为scope
而不是namespace
:
namespace :api, defaults: {format: :json} do
namespace :v1 do
scope '/problems' do
resources :details, only: [:index, :show], concerns: :votable
这应该生成这样的路由:
/api/v1/problems/votes => Api::V1::VotesController
更新:
concern :votable do
resources :votes, only: [:index, :create]
end
namespace :api, defaults: {format: :json} do
namespace :v1 do
scope 'problems' do
resources :details, only: [:index, :show], concerns: :votable, controller: '/problems/details'
end
end
end
路线:
$ rake routes|grep 'api'
api_v1_detail_votes GET /api/v1/problems/details/:detail_id/votes(.:format) api/v1/votes#index {:format=>:json}
POST /api/v1/problems/details/:detail_id/votes(.:format) api/v1/votes#create {:format=>:json}
api_v1_details GET /api/v1/problems/details(.:format) api/v1//problems/details#index {:format=>:json}
api_v1_detail GET /api/v1/problems/details/:id(.:format) api/v1//problems/details#show {:format=>:json}
这是您要找的东西吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句