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
- 浏览 954
- 评论(0)
- 论坛回复 / 浏览 (0 / 2029)
- 查看更多
相关推荐
标题 "ruby 1.8.7 rails 2.3.4" 提及的是 Ruby 语言的一个较旧版本(1.8.7)以及与其兼容的 Rails 框架的老版本(2.3.4)。Ruby 是一种面向对象的、动态类型的编程语言,而 Rails 是一个基于 MVC(模型-视图-控制器...
rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器 Rails 语义记录器 语义记录器用语义记录器替代 Rails 缺省记录器。http://github.com/rocketjob/rails_semantic_logger文档有关完整文档...
在Rails应用中实现用户登录和验证是构建任何Web服务的基础。本文将深入探讨Rails中的http_authentication和restful-authentication插件,这两种方法都常用于用户身份验证。 首先,让我们了解HTTP基本认证...
标题 "ralis gem files" 指向的是与 Rails 框架相关的宝石(gem)文件,特别是针对 Rails 2.3.4 版本。Rails 是一个流行的开源 web 应用程序框架,由 Ruby 语言编写,遵循 Model-View-Controller (MVC) 设计模式,...
在描述中提到的"Knock"是一个专门为Rails API设计的库,它帮助开发者实现JSON Web Token(JWT)的身份验证,这是一种安全的身份验证机制,适用于无状态API。 JWT是一种轻量级的认证协议,它允许服务器向客户端发送...
- **升级**:当需要更新到Rails的最新版本时,可以使用`bundle update rails`命令来更新依赖。 - **回滚**:如果更新后出现问题,可以通过`git`命令或者手动修改`Gemfile`来回滚到之前的版本。 #### 六、添加第二个...
### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...
在添加或删除商品时,更新购物车模型,并确保事务处理正确,以防止数据不一致。 在视图层,使用ERB(Embedded Ruby)模板语言来渲染HTML,展示商品列表和购物车内容。可以创建一个购物车组件(partial),在多个...
knock, 用于 Rails API的无缝JWT身份验证 敲门 用于 Rails API的无缝JWT身份验证描述敲门是 Rails api的认证解决方案,基于JSON网络令牌的应用程序。什么是JSON网络令牌? :为什么要使用这里选项?它是轻量级的。它...
Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...
《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...
Rails 2.1.0引入了许多新特性,例如活动记录(ActiveRecord)的自动保存关联、部分渲染以及自定义验证选项等。 7. **activerecord-2.1.0.gem**:ActiveRecord是Rails中的ORM(对象关系映射)库,负责将数据库表映射...
ActiveRecord允许开发者用Ruby代码定义数据库表的结构,以及与表相关的操作,如创建、读取、更新和删除(CRUD)记录。 路由(Routing)在Rails中扮演着核心角色,它将HTTP请求映射到相应的控制器动作。通过配置`...
3. Rails 3.2: Rails 3.2进一步优化了性能,引入了低延迟的LogSubscriber,提升了日志记录的效率。ActiveRecord的查询性能得到提升,例如添加了`pluck`方法,可以直接获取数据库列的值。此外,`rails generate ...
同时,表单是Web应用中不可或缺的部分,Rails提供了丰富的API来处理表单的创建和验证。此外,布局(Layouts)允许开发者在多个页面中重用公共的HTML代码,如头部和尾部,从而提高开发效率。 #### 7. Ajax and Web ...
### Rails for Zombies 知识点解析 #### 一、Rails for Zombies 介绍 Rails for Zombies 是一套面向初学者的 Ruby on Rails 教程。通过一系列有趣且互动性强的练习,帮助学习者掌握 Rails 的基本概念和技术。课程...
### Rails 101S: 初学者必备的Ruby on Rails 宝典 #### Introduction: 深入了解Ruby on Rails 《Rails 101S》是一本为Ruby on Rails初学者准备的手册,旨在帮助新手快速入门并掌握基本的开发技能。本手册将从最...