日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
RubyonRails事物嵌套具體方法應用解析

要向熟練地掌握Ruby on Rails具體用法,為我們的編程帶來方便。首先就要從其內(nèi)置的一些功能特點看起。比如Ruby on Rails事物嵌套等。#t#

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,枝江企業(yè)網(wǎng)站建設,枝江品牌網(wǎng)站建設,網(wǎng)站定制,枝江網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,枝江網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

首先看 transaction 方法

  1. ActiveRecord::Transactions 
    Public Class methods  
  2. # File vendor/rails/acti
    verecord/lib/active_record/
    transactions.rb, line 187  
  3. 187: def transaction(&block)  
  4. 188: self.class.transaction(&block)  
  5. 189: end 

可以看出他是調(diào)用類方法,類方法代碼如下:

 
 
 
  1. # File vendor/rails/activerecord/lib/
    active_record/transactions.rb, line 75  
  2. def transaction(&block)  
  3. increment_open_transactions  
  4. begin  
  5. #connection is kind of MysqlAdapter  
  6. connection.transaction(Thread.current
    ['start_db_transaction'], &block)  
  7. ensure  
  8. decrement_open_transactions  
  9. end  
  10. end  
  11. #connection.transaction call method in  
  12. # File vendor/rails/activerecord/
    lib/active_record/connection_
    adapters/abstract/database_
    statements.rb, line 58  
  13. # Wrap a block in a transaction. 
    Returns result of block.  
  14. def transaction(start_db_transaction = true)  
  15. transaction_open = false 
  16. begin  
  17. if block_given?  
  18. if start_db_transaction  
  19. begin_db_transaction  
  20. transaction_open = true 
  21. end  
  22. yield  
  23. end  
  24. rescue Exception =>
     database_transaction_rollback  
  25. if transaction_open  
  26. transaction_open = false 
  27. rollback_db_transaction  
  28. end  
  29. raise unless database_transaction
    _rollback.is_a? ActiveRecord::Rollback  
  30. end  
  31. ensure  
  32. if transaction_open  
  33. begin  
  34. commit_db_transaction  
  35. rescue Exception => database
    _transaction_rollback  
  36. rollback_db_transaction  
  37. raise  
  38. end  
  39. end  
  40. end 

 

上面的代碼即實現(xiàn)了rails中的transaction,可見ActiveRecord是不支持Ruby on Rails事物嵌套的。 如果模型使用的是相同的數(shù)據(jù)庫, 那么用 ModelA.transaction 或 ModelB.transaction的作用是一樣的。

 
 
 
  1. Code  
  2. objecta.transaction do  
  3. objectb.save!  
  4. end 

或者

 
 
 
  1. objectb.transaction do  
  2. objecta.save!  
  3. end 

或者

 
 
 
  1. ModelA.transaction do  
  2. objectb.save!  
  3. end 

都是一樣的!

這些對象的方面或類方面, 到***都是轉(zhuǎn)換成SQL,讓數(shù)據(jù)庫來執(zhí)行, 如果明白這個,一切都變得簡單了!

就從SQL而言 "model.transaction do" 只是執(zhí)行 Begin, "end" 執(zhí)行Commit. 對于MYSQL個別是引摯支持的存儲點功能不在本文討論范圍之內(nèi)。補充一下, 目前只是SQLServer支持Ruby on Rails事物嵌套,所以如果說ROR支持事務嵌套也就有點勉強!


本文名稱:RubyonRails事物嵌套具體方法應用解析
URL鏈接:http://m.5511xx.com/article/cdgihdi.html