在嵌套资源_and_ namespace中的Rails url_是url_for生成错误的url?

时间:2014-07-30 19:52:50

标签: ruby-on-rails-3.2 namespaces

让我们假设以下嵌套资源带有命名空间(我强制使用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生成当您拥有嵌套资源时不存在的网址。

这是 - 我的诅咒 - 对吗?

0 个答案:

没有答案