7

我有一个MyEngine没有独立命名空间的 Rails 引擎。根据文档,我正在尝试使用多态助手生成资源链接。

引擎路线:

# config/routes.rb
...
  namespace :admin do
    resources :my_resource
  end
...

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

如果my_resourceMyResource具有 ID 的模型实例12345,我希望:

polymorphic_url([my_engine, :admin, my_resource])

渲染:

/my_engine/admin/my_resource/12345

但是我错了。相反,我得到一个例外:

undefined method `admin_my_engine_my_resource_path'...

所以,polymorphic_url正在尝试使用admin_my_engine_my_resource_path它真正应该使用的东西更像my_engine.admin_my_resource_path(my_resource)

Rails 似乎添加:admin了错误的方式......还是我做错了?

4

3 回答 3

3

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

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

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

祝你好运!

于 2012-09-03T19:12:17.013 回答
0

运行rake routes并从那里获取 url 辅助函数名称。您也可以在此处共享rake routes输出。

于 2012-08-29T06:39:48.943 回答
0

我最近在 Rails 5 中遇到了这个问题,并找到了以下通用解决方案。

鉴于我的引擎名为 YamsCore,它会生成常见的 url 帮助程序,格式为:

url_for(yams_core.album_tracks_path)

您可以编写一个接受任何模型的通用视图助手并通过以下方式生成 url:

path = polymorphic_path([view.yams_core, my_resource])

如果您需要指定操作

path = polymorphic_path([view.yams_core, my_resource], action: :edit)

IE

path = polymorphic_path([view.engine_prefix, my_resource])
于 2019-03-07T12:17:01.377 回答