Rails引擎:命名空间的多态URL

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_resourceMyResourceID 为的模型的实例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了错误的方法...或者我做错了吗?

eng*_*ave 3

您是否尝试过通过作用域而不是命名空间来执行此操作?

请参阅这篇 SO 文章以获得更好的解释。Rails 范围路由

设计宝石就是一个很好的例子。

祝你好运!

  • 你的回答促使我仔细研究“命名空间”和“范围”,我最终创建了诸如“范围模块:“admin”,as:“admin””之类的范围来解决它。谢谢! (2认同)