tri*_*anm 5 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2
我有一个Rails引擎,MyEngine
它没有隔离的名称空间。我正在尝试使用多态助手来生成指向docs的资源链接。
引擎路线:
# config/routes.rb
...
namespace :admin do
resources :my_resource
end
...
Run Code Online (Sandbox Code Playgroud)
输出示例rake app:routes
(请记住,这是一个引擎):
admin_my_resources GET /admin/my_resources(.:format) my_engine/admin/my_resources#index
POST /admin/my_resources(.:format) my_engine/admin/my_resources#create
new_admin_my_resource GET /admin/my_resources/new(.:format) my_engine/admin/my_resources#new
edit_admin_my_resource GET /admin/my_resources/:id/edit(.:format) my_engine/admin/my_resources#edit
admin_my_resource PUT /admin/my_resources/:id(.:format) my_engine/admin/my_resources#update
DELETE /admin/my_resources/:id(.:format) my_engine/admin/my_resources#destroy
Run Code Online (Sandbox Code Playgroud)
如果my_resource
是MyResource
ID 为的模型的实例12345
,我期望:
polymorphic_url([my_engine, :admin, my_resource])
Run Code Online (Sandbox Code Playgroud)
渲染:
/my_engine/admin/my_resource/12345
Run Code Online (Sandbox Code Playgroud)
但是我错了。相反,我得到一个例外:
undefined method `admin_my_engine_my_resource_path'...
Run Code Online (Sandbox Code Playgroud)
所以,polymorphic_url
正在尝试使用admin_my_engine_my_resource_path
它应该真正使用的地方my_engine.admin_my_resource_path(my_resource)
Rails似乎添加:admin
了错误的方法...或者我做错了吗?
您是否尝试过通过作用域而不是命名空间来执行此操作?
请参阅这篇 SO 文章以获得更好的解释。Rails 范围路由
设计宝石就是一个很好的例子。
祝你好运!