Rails:为什么insert with accepts_nested_attributes_for有一个空行?

时间:2013-04-05 14:31:16

标签: ruby-on-rails insert

当我插入db时,我遇到了rails的问题:如果我设置了doc_items_attributes,则总是有一行是[] a有一个空的外键和id

class Doc < ActiveRecord::Base

  attr_accessible  :doc_items_attributes, :partner_info

  has_many :doc_items, dependent: :destroy
  accepts_nested_attributes_for :doc_items, allow_destroy:true 

模型doc_items

class DocItem < ActiveRecord::Base
  attr_accessible :qty, :doc_id
  belongs_to :doc

数据:

  params = { :doc => {
  :partner_info => 'john', :doc_items_attributes => [
    { :qty => '1' },
    { :qty => '2' }
   ]
  }}



doc = Doc.new()

doc.assign_attributes(params)    

doc.doc_items.build

doc.save
doc.doc_items.length #3

表doc_items中没有数据的空行,但doc_id有值。

DOC:

id partner
1 john

doc_items:

id doc_id qty
1   1     1
2   1     2
3   1   

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您正在

中构建一个新的空文档项目
  

doc.doc_items.build

线。那是空行。

您可能希望使用构建方法来构建doc_items。

doc = Doc.create( :partner_info => "john")
doc.doc_items.build(:qty => '1')
doc.doc_items.build(:qty => '2')    
doc.save

答案 1 :(得分:0)

我找到了

删除此行

doc.doc_items.build