rails demo && cd demo
ruby script/generate model Post title:string body:text lock_version:integer
# 注意进入 migrate lock_version 后面加 :default => 0
ruby script/generate model Comment body:text post_id:integer
rake db:migrate
model里配置 Post has many comments, 代码如下:
class Post < ActiveRecord::Base
has_many :comments, :dependent => :destroy
end
class Comment < ActiveRecord::Base
belongs_to :post
after_destroy :change_post_title!
protected
def change_post_title!
self.post.update_attributes!(:title => "new title")
end
end
进入console, 执行如下代码:
post = Post.new(:title => 'title')
post.comments.build(:body => 'comment1')
post.comments.build(:body => 'comment1')
post.save
Post.last.destroy # => ActiveRecord::StaleObjectError: Attempted to delete a stale object
Log记录:
Post Create (0.2ms) INSERT INTO "posts" ("created_at", "title", "body", "updated_at", "lock_version") VALUES('2009-11-18 09:12:48', 'title', NULL, '2009-11-18 09:12:48', 0)
Comment Create (0.1ms) INSERT INTO "comments" ("created_at", "body", "updated_at", "post_id") VALUES('2009-11-18 09:12:48', 'comment1', '2009-11-18 09:12:48', 6)
Comment Create (0.1ms) INSERT INTO "comments" ("created_at", "body", "updated_at", "post_id") VALUES('2009-11-18 09:12:48', 'comment1', '2009-11-18 09:12:48', 6)
Post Load (0.3ms) SELECT * FROM "posts" ORDER BY posts.id DESC LIMIT 1
Comment Load (0.3ms) SELECT * FROM "comments" WHERE ("comments".post_id = 6)
Comment Destroy (0.2ms) DELETE FROM "comments" WHERE "id" = 9
Post Load (0.2ms) SELECT * FROM "posts" WHERE ("posts"."id" = 6)
Post Update with optimistic locking (0.1ms) UPDATE "posts"
SET "updated_at" = '2009-11-18 09:12:54', "title" = 'new title', "lock_version" = 1 WHERE id = 6 AND "lock_version" = 0
Comment Destroy (0.1ms) DELETE FROM "comments" WHERE "id" = 10
Post Load (0.2ms) SELECT * FROM "posts" WHERE ("posts"."id" = 6)
Post Destroy (0.1ms) DELETE FROM "posts" WHERE "id" = 6 AND "lock_version" = 0
通过log记录分析就能明白. 假如主类有lock_version字段做子类的级联删除, Rails 2.3.4 已经加了表记录锁.
分享到:
- 2009-11-18 17:34
- 浏览 919
- 评论(0)
- 论坛回复 / 浏览 (0 / 1996)
- 查看更多
相关推荐
NULL 博文链接:https://zetorli.iteye.com/blog/1508689
rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器 Rails 语义记录器 语义记录器用语义记录器替代 Rails 缺省记录器。http://github.com/rocketjob/rails_semantic_logger文档有关完整文档...
knock, 用于 Rails API的无缝JWT身份验证 敲门 用于 Rails API的无缝JWT身份验证描述敲门是 Rails api的认证解决方案,基于JSON网络令牌的应用程序。什么是JSON网络令牌? :为什么要使用这里选项?它是轻量级的。它...
Knock - 为Rails API实现无缝JWT身份验证
《Rails之道》按照Rails的各个子系统进行组织编排,分别介绍了Rails的环境、初始过程、配置和日志记录,Rails的分配器、控制器、页面生成和路由,REST、资源和Rails,ActiveRecord的基础、关联、验证和高级技巧,...
《Ruby on Rails Tutorial》中文版(原书第2版,涵盖 Rails 4) Ruby 是一门很美的计算机语言,其设计原则就是“让编程人员快乐”。David Heinemeier Hansson 就是看重了这一点,才在开发 Rails 框架时选择了 Ruby...
rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...
NULL 博文链接:https://hlee.iteye.com/blog/587006
jquery-validation-rails, 对 Rails 资产管道的jQuery验证 :: 验证:: rails针对 Rails 资产管道的验证 。安装这里 gem将以下行添加到项目的Gemfile 中:gem 'jquery-validation-rails'在你的终端中运行以下命令:cd...
[Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...
Ruby on Rails Guides v2 - Ruby on Rails 4.2.5
一个用Ruby on Rails搭建的图片分享的网站项目.完整源代码
本资源是参照rails敏捷开发第四版书中的例子,rails的版本是rails3.2.6
Bootstrap 3 和 Rails 4(样例用的是Ruby 2.1.1,Rails 4.1.4) Table of Contents Preface 1 Chapter 1: Introducing Web Application Development in Rails 7 Why Bootstrap with Rails? 8 Setting up a Todo ...
adminlte-rails, AdminLTE Rails gem 将AdminLTE主题与 Rails 资产管道集成 AdminLTE Rails gem AdminLTE 是后端的高级 Bootstrap 主题。英镑 AdminLTE Rails gem 与 Rails 资产管道集成了英镑AdminLTE主题。安装将...