让我们假设以下嵌套资源带有命名空间(我强制使用TLA [三字母缩写词]作为子项目/子应用程序的命名空间)
所以我在routes.rb
:
namespace :ldc do
resources :pubowners do
resources :pubs
resources :companies
end
resources :pubs, except: :new
end
模型看起来像这样:
class Ldc::Pubs < ActiveRecord::Base
class Ldc::Pubowners < ActiveRecord::Base
等等,因为所有都是通过脚手架创建的,所有看起来都很好并且有效......
...只要我选择我的“manualy”那样的话:
- url=@pub.persisted? ? ldc_pubowner_pub_url(@pub.pubowner): ldc_pubowner_pubs_url(@pub.pubowner)
= form_for @pub, url: url do |f|
...
我认为这很讨厌......
进入更深层次我发现,在polymorphic_routes.rb中url_for
或更好build_named_route_call
,只是忽略(或不会)输入的第二个元素的命名空间,即。相同的命名空间被添加两次(或更多)。以下示例:
link_to @pub -> /ldc/pub/1
link_to @pubowner -> /ldc/pubowner/17
link_to [@pubowner,@pub] -> /ldc/pubowner/17/ldc/pub/1 < wrong should be ../17/pub/1
编辑:
link_to [@pubowner,@pub] -> error no route for "ldc_pubowner_ldc_pub_url"
如果routes.rb看起来像这样,那么最后一个是正确的。
namespace :ldc do
resources :pubowners do
namespace :ldc do
resources :pubs
resources :companies
end
end
resources :pubs, except: :new
end
所以我的结论是,url_for
或更好build_named_route_call
生成当您拥有和嵌套资源时不存在的网址。
这是 - 我的诅咒 - 对吗?