2012-01-27 17 views
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の間の通信

答えて

関連する問題