Method: Og::SqlStore#eval_og_delete

Defined in:
lib/og/store/sql.rb

#eval_og_delete(klass) ⇒ Object

Compiles the og_delete method for this class. This method is used to delete instances of this class.



950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
# File 'lib/og/store/sql.rb', line 950

def eval_og_delete klass
  klass.module_eval %{
    def og_delete(store, cascade = true)
      #{insert_advices :pre, :og_delete, klass, :advices}
      
      if cascade
        
        transaction do |tx|
          tx.exec "DELETE FROM #{klass.table} WHERE #{pk_field klass}=\#{pk}"
          if descendants = #{klass}.ann.self[:descendants]
            descendants.each do |dclass, foreign_key|
              tx.exec "DELETE FROM \#{dclass::OGTABLE} WHERE \#{foreign_key}=\#{pk}"
            end
          end
        end
        
      else
        tx.exec "DELETE FROM #{klass.table} WHERE #{pk_field klass}=\#{pk}"
      end
      
      #{insert_advices :post, :og_delete, klass, :advices}
    end
  }
end