2011-06-12 99 views
1

我有一个双重嵌套的资源:两次嵌套资源的form_for问题

resources :companies do 
    resources :orders do 
     resources :comments 
    end 
end 

有问题我试图包括窗体创建一个评论我的订单显示视图时。这是我试过的:

<%= form_for([@order, @order.comments.build]) do |f| %> 

但是,这给了我一个没有方法的错误。

任何机会,你可以推荐最好的方式来处理这个问题。

回答

3

您必须定义公司。如果你写rake routes你可以看到你没有order_comments_path,因为它的双重嵌套,所以你会看到像company_order_commments_path这样的东西至少有两个参数,一个company_id和一个order_id。所以如果你真的想使用这个3级nester资源,你必须在表单路径中添加一个@company变量。像:

<%= form_for([@company, @order, @order.comments.build] do |f| %> 

但在大多数情况下,这是没用的,同时定义companyorder来识别order,所以这可能是更好的其他选择,增加了对orderscomments单独另一条路线,这是有道理的。 在你的routes.rb

... 
resources :orders do 
    resources :comments 
end 
... 

所以,你可以操纵orders,不指定company。同样在最普通的情况下,通过定义3级嵌套路线,您不会获得任何重要优势。

+0

太棒了!谢谢Jx – 2011-06-12 20:54:34