我有三个模型,Document,Section和Paragraph。
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
我想更新Document和Section模型的状态。
例如,sections表中的'status'列取决于段落表中的'text'列。 simillarly,文档表中的'status'列取决于sections表中的'status'列。
简而言之,对于部分,
for document,
问题:
我很困惑哪些回调适合于assign_order_status方法。
因为Document的'status'取决于Section的状态而Section的状态取决于Paragraph的值。 但Rails验证和回调正在从父级到子级运行。在我的例子中,'status'值的计算基于从子到父。
如何在开始验证之前更新文档和部分的状态值?
请有人帮我解决这个问题。