我有一个Rails引擎MyEngine
,它没有一个独立的命名空间。根据{{3}},我正在尝试使用多态帮助程序生成资源链接。
引擎路线:
# 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_resource
是标识为MyResource
的{{1}}模型的实例,我希望:
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
Rails似乎正在以错误的方式添加my_engine.admin_my_resource_path(my_resource)
......或者我做错了吗?
答案 0 :(得分:3)
答案 1 :(得分:0)
运行rake routes
并从那里获取url帮助函数名称。您也可以在此处分享rake routes
输出。
答案 2 :(得分:0)
我最近在Rails 5中遇到了这个问题,并找到了以下一般解决方案。
给出我的名为YamsCore的引擎,该引擎以以下形式生成常用的url帮助程序:
url_for(yams_core.album_tracks_path)
您可以编写一个接受任何模型的通用视图助手,并通过以下方式生成网址:
path = polymorphic_path([view.yams_core, my_resource])
,以及是否需要指定操作
path = polymorphic_path([view.yams_core, my_resource], action: :edit)
即
path = polymorphic_path([view.engine_prefix, my_resource])