ruby transaction(交易)
来源:互联网 发布:mac 蓝牙鼠标漂移 编辑:程序博客网 时间:2024/05/17 21:47
交易Transactions
Transaction (交易)保证所有资料的操作都只有在成功的情况下才会写入到资料库,最著名的例子也就是银行的帐户交易,只有在帐户
提领金额及存入帐户这两个动作都成功的情况下才会将这笔操作写入资料库,否则在其中一个动作因为某些原因失败的话就会放弃
所有已做的操作将资料回复到交易前的状态。在Rails中使用交易的方式像这样:
ActiveRecord::Base.transaction do david.withdrawal(100) mary.deposit(100)end
你可以在一个交易中包含不同Active Record的类别或物件,这是因为交易是以资料库连线为范围,而不是个别Model:
User.transaction do User.create!(:name => 'ihower') Feed.create!end
注意到这里我们要使用create!
而不是create
,这是因为前者验证失败才会丢出例外,好让整个交易失败。同理,在交易里做更新应该使用update_attributes!
而不是update_attributes
。
单一Model的save
及destroy
方法已经帮你使用transaction包起来了,当资料验证失败或其中的回呼发生例外时,Rails就会触发rollback。所以下述的交易区块是多余的不需要写:
User.transaction do # 这是多余的 User.create!(:name => 'ihower')end
另外,由于资料的更新要在交易完成后才能被读取到,所以如果你在after_save
回呼里让外部服务存取(例如呼叫全文搜寻引擎做索引),很可能因为交易尚未完成,会读取不到更新。这时候必须改用after_commit
这个回呼,才能确保读取到交易完成后的资料。
转自:http://ihower.tw/rails3/activerecord-others.html#transactions
0 0
- ruby transaction(交易)
- 数据库--交易Transaction
- SAP 业务交易事件BTE(Business Transaction Event)
- 比特币交易手续费(Transaction Fees)怎么计算?
- SAP 业务交易事件BTE(Business Transaction Event)
- 比特币交易(Transaction)的输入与输出
- HDU 6201 transaction transaction transaction(树上dfs/费用流)
- HDU 6201 transaction transaction transaction(树形dp)
- hdu 6201 transaction transaction transaction(最长路)
- HDU 6201 transaction transaction transaction(SPFA模板)
- HDU 6201 transaction transaction transaction(网络流+最短路)
- HDU 6201 transaction transaction transaction (最长路)
- HDU 6201 transaction transaction transaction (树形dp)
- Hdu 6201 transaction transaction transaction(最长路)
- 什么是数学交易?(量化交易)
- 交易明细(仿微信)
- 交易
- 交易
- CURL模拟提交数据,TP暴力版
- PHP学习笔记——PHP变量的范围;
- SpringMvc使用Freemarker时的配置文件
- Struts2配置时报struts-default.xml:65:72异常的解决方法
- css + js实现简单无缝滚动字幕
- ruby transaction(交易)
- Spring Data JPA 系列 —— 两张表(多对多关联,关联表带扩展字段)
- 7805(一)
- 操作系统面试题总结
- 使用Vue.js制作仿Metronic高级表格(一)静态设计
- java 泛型详解
- SqlSugar框架T4模板的使用
- HDU 3951 Coin Game(博弈)
- 剑指offer 翻转单词顺序列