【问题标题】:Rails: New entry to a model that belongs_to two otherRails:属于其他两个模型的新条目
【发布时间】:2012-08-28 15:26:49
【问题描述】:

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

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

opinion#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构建的原因意见)。所以,这只是一种增强。

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

【问题讨论】:

  • 你能发布错误信息吗? (我知道这是一项集体作业)。只需要查看消息即可。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    相关资源
    最近更新 更多