Rails:属于另外两个模型的新入口

在我的应用程序中,产品有很多意见,由许多客户编写。 以下是具有关联的模型:

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)。

方法意见#create如何创建新意见,属于两种模式:客户端和产品?

我试图直接传递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行),这就是为什么我使用product来构建意见) 。 所以,这只是一个增强。

任何的想法? 提前致谢。

product.opinions.build params[:opinion]将建立一个已经将product_id设置为product.id的新观点。 它知道这样做是因为关联belongs_to :product 。 但是,它还不知道它属于哪个客户端,因此您必须手动设置它。 但是你需要将attr_accessible:client_id添加到Opinion来执行此操作。