rails 4嵌套资源路由错误

时间:2014-04-15 16:26:34

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

我有一个路由文件(Rails 4.0.4 App):

resources :products do
  resources :variants, except: :index
end

佣金路线给出:

       product_variants POST   /products/:product_id/variants(.:format)             variants#create
    new_product_variant GET    /products/:product_id/variants/new(.:format)         variants#new
   edit_product_variant GET    /products/:product_id/variants/:id/edit(.:format)    variants#edit
        product_variant GET    /products/:product_id/variants/:id(.:format)         variants#show
                        PATCH  /products/:product_id/variants/:id(.:format)         variants#update
                        PUT    /products/:product_id/variants/:id(.:format)         variants#update
                        DELETE /products/:product_id/variants/:id(.:format)         variants#destroy

所以建议我使用

<%= form_for [@product, @variant] do |f| %>

但这会生成(注意URL):

<form accept-charset="UTF-8" action="/variants/1" class="edit_variant" id="edit_variant_1" method="post">

我得到(当然)路由错误,说没有路由与PATCH / variants / 1匹配

当我重定向到位于 api / 下的命名空间的Api控制器时,同样奇怪的行为:

redirect_to [:api, @product, @variant]

得到我:没有路线与/ api / variants / 1

匹配

所以:

  • 我检查了所有路线
  • 我知道如何嵌套资源并命名它们
  • 我以为我知道如何生成网址&#39; s ;-)

生成网址

时会忽略@products

有没有人知道在哪里继续看?

2 个答案:

答案 0 :(得分:1)

看看你的变种控制器。你在实例化@product吗?

发布控制器的代码可能会有所帮助。

希望这有帮助!

亚历

答案 1 :(得分:0)

好的问题实际上在于不同的控制器。我以某种方式在之前的行动中实例化了@products,但显然做错了。

似乎是一种能量饮料问题。谢谢你指出我正确的解决方案!