我正在尝试使用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>
有什么问题?
答案 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)