嵌套的命名空间资源,多态关联和路径

时间:2013-12-18 06:10:40

标签: ruby-on-rails ruby-on-rails-4

这是rails中的错误吗? 我有以下路由:

namespace :admin do
 resources :products do
  resources :images
 end
end

创建以下路径

admin_product_image GET /admin/products/:product_id/images/:id(.:format)  admin/images#show

然而,当我尝试通过

返回路径时
polymorphic_path( [ @imageable, @image ] ) 

它返回一个错误:#<#:0x007ff8963f0f98>

的未定义方法`admin_product_admin_image_path'

似乎在寻找`admin_product_admin_image_path'而不是'admin_product_image_path'

如果我调试“polymorphic_routes.rb”并修改它:

(proxy || self).send(named_route, *args)

发送“admin_product_admin_image_path”并生成错误,而不是发送:

(proxy || self).send("admin_product_image_path", *args)

没有出现错误。 polymorphic_path不能用于命名空间吗?

修改 现在可以确认polymorphic_url函数不适用于名称空间!

修改 通过编辑糟糕的主意 polymorphic_routes.rb,我设法硬编码修复糟糕的主意

In def build_named_route_call(records, inflection, options = {}) ....
   ....
   route << model_name_from_record_or_class(record).singular_route_key
   .....
   route << model_name_from_record_or_class(record).route_key

bad *

route << model_name_from_record_or_class(record).singular_route_key.gsub(/admin_/,'').to_s

route << model_name_from_record_or_class(record).route_key.gsub(/admin_/,'').to_s

1 个答案:

答案 0 :(得分:0)

这是rails中的一个错误。上面我的问题中的编辑是需要修复的地方......但是我的硬编码编辑会破坏rails中的其他内容 - 所以请避免使用它。

目前唯一的解决方案是不在rails中使用命名空间,嵌套资源和多态关联。