我想知道为什么我的创作不起作用。如果我有以下两个型号
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,因为它是通过产品创建的。
我有这个工作,现在我无法弄清楚我是如何弄乱的。任何帮助表示赞赏。
答案 0 :(得分:0)
酷...发布后,阅读我自己的帖子,我试图删除product_id存在的验证。
这似乎可以解决错误。
我猜这是rails中accepts_nested_attributes_for
的限制 - 父对象不能在模型中验证它的外键。