嵌套资源表单中的未定义局部变量

时间:2014-04-14 22:13:53

标签: ruby-on-rails

我正在尝试使用simple_form构建嵌套资源表单。

我有两个班级:

class Product < ActiveRecord::Base
   has_one    :product_review, dependent: :destroy
end

class ProductReview < ActiveRecord::Base
end

我添加了路线,并在我的路线中

                  admin_product_product_reviews GET      /admin/products/:product_id/product_reviews(.:format)                                   admin/product_reviews#index
                                                POST     /admin/products/:product_id/product_reviews(.:format)                                   admin/product_reviews#create
               new_admin_product_product_review GET      /admin/products/:product_id/product_reviews/new(.:format)                               admin/product_reviews#new
              edit_admin_product_product_review GET      /admin/products/:product_id/product_reviews/:id/edit(.:format)                          admin/product_reviews#edit
                   admin_product_product_review GET      /admin/products/:product_id/product_reviews/:id(.:format)                               admin/product_reviews#show
                                                PATCH    /admin/products/:product_id/product_reviews/:id(.:format)                               admin/product_reviews#update
                                                PUT      /admin/products/:product_id/product_reviews/:id(.:format)                               admin/product_reviews#update
                                                DELETE   /admin/products/:product_id/product_reviews/:id(.:format)                               admin/product_reviews#destroy

我需要创建一个表单来构建和编辑product_review。

我创建了一个按钮:

= link_to new_admin_product_product_review_path(product)

我创建了表单

= simple_form_for [product,product_review], url: admin_product_product_review_path do |form|

但是它返回给我错误:

undefined local variable or method `product' for #<#<Class:0x007fbaf54d1720>:0x007fbae974ea90>

有什么问题?

1 个答案:

答案 0 :(得分:0)

你们的关系是错误的。如果你在一个模型中有“has_one”,那么你应该在另一个模型中有“belongs_to”。

然后,您应该找到要添加评论的产品。 “@product”

然后构建评论而不是产品。 build_association

http://guides.rubyonrails.org/association_basics.html

模型

class ProductReview < ActiveRecord::Base
   belongs_to :product
end

控制器

@product = Product.find(params[:id])

视图

form_for (@product,@product.build_product_review)