在我的应用程序中,产品有很多意见,由许多客户编写。以下是具有关联的模型:
class Product < ActiveRecord::Base
attr_accessible :name, :desc, :price
has_many :opinions
end
class Client < ActiveRecord::Base
attr_accessible :name, :bio
has_many :opinions
end
class Opinion < ActiveRecord::Base
attr_accessible :rate, :comment
belongs_to :client, :product
end
在参数中,我有评估邀请ID,这有助于我同时获得product_id和client_id(所以考虑我同时拥有它们)。
表单仅包含费率(radio_button,从1到5)和评论(text_field)。
方法意见#creau如何创建新意见,属于两种模式:客户端和产品?
我试图直接传递client_id和product_id,但是我收到了MassAssignment错误:
# Remember: I have product_id and client_id
product = Product.find_by_id product_id
opinion = product.opinions.build params[:opinion]
opinion.product_id = product_id
opinion.client_id = client_id
opinion.save
以防它有用:在我的应用程序的第一个版本中,该意见仅属于产品,使用上面的代码(删除opinion.client_id = client_id
行)效果很好,这就是我使用{{1建立意见)。所以,这只是一种增强。
有什么想法吗?提前谢谢。
答案 0 :(得分:1)
product.opinions.build params[:opinion]
将建立一个已将product_id设置为product.id的新观点。由于关联belongs_to :product
,它知道这样做。但是,它还不知道它属于哪个客户端,因此您必须手动设置它。但是你需要将attr_accessible:client_id添加到Opinion来执行此操作。