Ruby on rails 3 rails 3-如何使用回调将值分配给嵌套属性

Ruby on rails 3 rails 3-如何使用回调将值分配给嵌套属性,ruby-on-rails-3,activerecord,callback,Ruby On Rails 3,Activerecord,Callback,我有三种模式,文件、章节和段落 class Document < ActiveRecord::Base attr_accessible :status has_many :sections accepts_nested_attributes_for :sections, :allow_destroy => :true private def assign_order_status section_statuses = sections.map(&am

我有三种模式,文件、章节和段落

class Document < ActiveRecord::Base
  attr_accessible :status

  has_many :sections
  accepts_nested_attributes_for :sections, :allow_destroy => :true

  private

  def assign_order_status
    section_statuses = sections.map(&:status)
    self.status = 
    if section_statuses.all? {|value| value == "completed" }
      "completed"
    elsif section_statuses.all? {|value| value == "new" }
      "new"
    else
      "inprocess"
    end
  end
end

class Section < ActiveRecord::Base
  attr_accessible :document_id, :status

  belongs_to :document
  has_many :paragraphs, :dependent => :destroy

  accepts_nested_attributes_for :paragraphs, :allow_destroy => :true

  private
  def assign_order_status
    paragraph_values = paragraphs.map(&:text)
    self.status = 
    if paragraph_values.all? {|value| !value.nil? }
      "completed"
    elsif paragraph_values.any? {|value| !value.nil? }
      "inprocess"
    else
      "new"
    end
  end
end

class Paragraph < ActiveRecord::Base
  attr_accessible :section_id, :text
  belongs_to :section 
end
我想更新文档和节模型的状态

例如,节表中的“状态”列取决于段落表中的“文本”列。 同样,文档表中的“状态”列取决于节表中的“状态”列

简言之,对于部分

如果表中段落中的所有“文本”均为零,则相应章节的“状态”必须更改为新的。 如果段落表中的任何一个“文本”列具有值,则节的“状态”必须更改为inprocess。 否则状态为完成。 对于文件

如果节表中的所有“状态”都是新的,则相应文档的“状态”必须更改为新的。 如果任何一个“状态”为inprocess,则文档的“状态”必须更改为inprocess。 否则就完成了。 问题:

我搞不清楚哪种回调适合于分配顺序状态方法

因为文档的“状态”取决于节的状态,节的状态取决于段落的值。 但是Rails验证和回调是从父级到子级运行的。在我的例子中,“status”值的计算是基于从子级到父级的

如何在开始验证之前更新文档和节的状态值

请任何人帮我解决这个问题