为什么accepts_nested_attributes_for没有按预期工作?

时间:2014-08-12 13:00:30

标签: ruby-on-rails activerecord ruby-on-rails-4

我想知道为什么我的创作不起作用。如果我有以下两个型号

class Product < ActiveRecord::Base
  belongs_to :product_template
  has_many :presentations, through: :product_presentations
  has_many :product_presentations

  accepts_nested_attributes_for :product_presentations

  validates :start_date, :product_template_id, presence: true
  validates :start_date, uniqueness: true
end


class ProductPresentation < ActiveRecord::Base
  belongs_to :product
  belongs_to :course
  belongs_to :presentation

  validates_presence_of :product_id, :course_id, :presentation_id
  validates_uniqueness_of :presentation_id, :scope => :product_id
end

我在控制台中输入以下内容。

product = Product.new(
{"start_date"=>"Sat, 06 Sep 2014 00:00:00 +0200", 
"product_template_id"=>"5", "product_presentations_attributes"=>{
  "0"=>{"course_id"=>"1", "presentation_id"=>"1"}, 
  "1"=>{"course_id"=>"2", "presentation_id"=>"2"}}})

应该保存,但我收到错误

#<ActiveModel::Errors:0x007f9eaeb9d698 @base=#<Product id: nil, product_template_id: 5, start_date: "2014-09-05 22:00:00", created_at: nil, updated_at: nil>, @messages={:"product_presentations.product_id"=>["can't be blank"]}>

现在我明白product_presentations_attributes哈希中没有product_id,但我认为这将是自动填充的rails,因为它是通过产品创建的。

我有这个工作,现在我无法弄清楚我是如何弄乱的。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

酷...发布后,阅读我自己的帖子,我试图删除product_id存在的验证。

这似乎可以解决错误。

我猜这是rails中accepts_nested_attributes_for的限制 - 父对象不能在模型中验证它的外键。