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

时间:2012-08-28 15:26:50

标签: ruby-on-rails rails-models mass-assignment

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

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建立意见)。所以,这只是一种增强。

有什么想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

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