1
before_save :set_path_name_csv, :if => Proc.new { |audience| audience.new_record? || audience.name_changed? || audience.parent_id_changed? }
after_save :set_path_ids_csv, :if => Proc.new { |audience| audience.path_ids_csv.nil? || @path_name_csv_updated }
def set_path_name_csv
if self.parent
self.path = self.parent.ancestors.map(&:name).unshift(self.parent.name).unshift(self.name).reverse.join(" > ")
else
self.path = self.name
end
@path_name_csv_updated = true
end
def set_path_ids_csv
if self.parent
self.path_ids_csv = self.parent.ancestors.map(&:id).unshift(self.parent.id).unshift(self.id).reverse.join(",")
else
self.path_ids_csv = self.id.to_s
end
self.send(:update_without_callbacks)
end
通信是使用實例變量像@path_name_csv_updated
一個好主意之前之間和之後保存回調溝通?有沒有更好的辦法?ActiveRecord的before_save之間after_save的