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”值的计算是基于从子级到父级的
如何在开始验证之前更新文档和节的状态值
请任何人帮我解决这个问题