MDA/MDD/TDD/DDD/DDDDDDD
          posts - 536, comments - 111, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          rails事務(wù)

          Posted on 2010-02-14 01:04 leekiang 閱讀(848) 評(píng)論(0)  編輯  收藏 所屬分類: ruby
          1,around_filter進(jìn)行action的自動(dòng)事務(wù)處理
          在controller里面可以使用around_filter來進(jìn)行action的包裝,當(dāng)action中彈出異常的時(shí)候渲染一個(gè)特殊的出錯(cuò) 頁(yè)面。將action代碼包裝在ActiveRecord::Base.transaction函數(shù)的block中執(zhí)行,當(dāng)引發(fā)異常后截獲并重新拋出一個(gè) ActiveRecord::Rollback異常讓rails將數(shù)據(jù)回滾掉。ActiveRecord::Base.transaction對(duì) ActiveRecord::Rollback異常處理后不會(huì)再將該異常往外面拋。

          around_filter :around_action_filter
          protected
          def transaction
          ret = true
          ActiveRecord::Base.transaction do
          begin
          yield if block_given?
          rescue Exception => ex
          set_notice(ex.message)
          ret = ex.message
          raise ActiveRecord::Rollback, ex.message
          end
          end
          return ret
          end
          def around_action_filter
          return yield if request.get?
          redirect_to(:controller => "error_display", :action => "error_notice") if?
          transaction { yield if block_given? } != true
          end

          這里的transaction函數(shù)可以用在action里面作為手動(dòng)事務(wù)處理的解決辦法。
          http://www.cgpad.com/SPAN/articles_show/940
          主站蜘蛛池模板: 舒兰市| 临泽县| 罗山县| 拉萨市| 滨海县| 肃南| 阿坝| 江门市| 都兰县| 广平县| 临清市| 河北区| 扎赉特旗| 安溪县| 长葛市| 凯里市| 平果县| 安丘市| 石城县| 顺义区| 鄯善县| 赤壁市| 肥东县| 乌什县| 兴业县| 阳城县| 大荔县| 南昌县| 鸡泽县| 安阳市| 石泉县| 武陟县| 大荔县| 万全县| 上犹县| 新密市| 株洲县| 宣威市| 昌都县| 清涧县| 东丽区|