- 浏览: 2073746 次
- 性别:
- 来自: NYC
文章分类
- 全部博客 (628)
- Linux (53)
- RubyOnRails (294)
- HTML (8)
- 手册指南 (5)
- Mysql (14)
- PHP (3)
- Rails 汇总 (13)
- 读书 (22)
- plugin 插件介绍与应用 (12)
- Flex (2)
- Ruby技巧 (7)
- Gem包介绍 (1)
- javascript Jquery ext prototype (21)
- IT生活 (6)
- 小工具 (4)
- PHP 部署 drupal (1)
- javascript Jquery sort plugin 插件 (2)
- iphone siri ios (1)
- Ruby On Rails (106)
- 编程概念 (1)
- Unit Test (4)
- Ruby 1.9 (24)
- rake (1)
- Postgresql (6)
- ruby (5)
- respond_to? (1)
- method_missing (1)
- git (8)
- Rspec (1)
- ios (1)
- jquery (1)
- Sinatra (1)
最新评论
-
dadadada2x:
user模型里加上 protected def email ...
流行的权限管理 gem devise的定制 -
Sev7en_jun:
shrekting 写道var pattern = /^(0| ...
强悍的ip格式 正则表达式验证 -
jiasanshou:
好文章!!!
RPM包rpmbuild SPEC文件深度说明 -
寻得乐中乐:
link_to其实就是个a标签,使用css控制,添加一个参数: ...
Rails在link_to中加参数 -
aiafei0001:
完全看不懂,不知所然.能表达清楚一点?
"$ is not defined" 的问题怎么办
202: Active Record Queries in Rails 3
译者: 夜鸣猪(http://hlee.rubyeye.com/) 校对: 哇牛
在上两集的Railscast里我们演示了如何配置Rails 3的配置环境和创建新的Rails 3应用程序。在这一集里我们将开始演示Rails 3的一些新的功能,这里从ActiveRecord的新检索接口开始。Pratik Naik有篇blog文章是关于这个主题的很值得阅读。
基本的演示例子
首先,我们使用一个基本的例子对照演示。旧的ActiveRecord如何调用和转换成新的Rails 3下的ActiveRecord如何实现查询调用。假定我们有两个models,Article和Comment,他们之间有has_many:comments的关系。那么,当我们需要查询最近十条记录时会执行如下语句:
当我们把上面的语句转换能Rails 3时,最基本的原则是把查询中的哈希参数替换成对应的方法,以上语句转换如下:
显然新的语法更简洁,可是,往往也不是所有的哈希参数都可以一点不变的转换成对应的方法,例如:
事实上,这条基本转换的规则(find的hash参数直接转换成同名的方法)只有两个例外,幸运的是上面的例子都包含了他们。上条语句是想要查询所有发布时间早于当前时间的文章和评论,在Rails 3里将会转成如下:
例外就是conditions变成了where,而include变成了复数形式includes。除此之外,所有其他在find中调用的方法,都可以完全和哈希参数同名。
本节最后,让我们看这样一个小例子,查询最近发表的一篇文章:
在Rails 3中我们可以转换如下:
值得说明的是,我们要把first放到最后,而且,鉴于我们是降序查询,那么,写成如下也可以:
这样写的执行效率和上面是一样的,不过,看起来更简洁。
在Rails 3.0里我们可以同时使用上面的两种查询语法。从3.1开始老的查询语法开始作废,到3.2老的查询语法将被完全移除。所以,为了将来考虑早点把老的语法替换掉是值得的。
或者,大家会怀疑为什么要破坏向下兼容的进行这样的语法兼容性修改。进行这样的语法升级的目的在于下面我们将要解释的Lazy Loading。
Lazy Loading
为了演示Lazy loading我们将使用Rails的控制台,查询所有的文章得到数组对象,如下:
如果,我们希望把得到的文章按照文章名字进行排序,可以使用如下方法:
这时我们会发现查询返回值不是Article的数组对象,而是一个ActiveRecord::Relation的对象。这个对象保存了我们希望进行的查询条件信息,但是数据库并没有实际执行这个查询操作。这就是我们在本篇里所说的Lazy Loading,即除非真正使用这些数据,否则实际的查询就不进行。例如,我们进行迭代或者是调用显示第一条记录,那么,这个数据库的查询就会真正执行,如下:
那么,让我们看看Lazy Loading对于我们的应用有什么作用。如果我们用scaffold来生产Model那么我们应该有会得到一个对应的articles的控制器,并且包含最基本的7个方法。其中,也包括index的方法是用Article.all来立即得到数据:
然而,如果这时我们使用的是Rails 3的语法并且对article使用了任何一种find的参数,例如按照文章名排序。这时Article.order(“name”)就会返回ActiveRecord::Relation的对象并且,实际的数据库查询不会在controller调用的时候执行。而是,在view页面进行迭代输出的时候执行。(译者晓夜注:这就是Lazy Loading的标准含义,减少触发时的等待时间,也就是降低返回空白页的等待可能。当然,下文还提到了Lazy Loading别的好处。)
这时我们就会看到按照文章名排序的列表。
Lazy Loading的好处也在于当view开启了fragment caching的时候,这时,数据库因为缓存,有些时候查询就不用实际执行。新的查询语法更容易构建查询条件,例如,我们希望检索只有设置了隐藏属性(hidden==1)的记录,那么,我们可以如下修改index方法:
这时,该方法会检查是否有hidden的参数传入,并且根据参数情况显示如下:
同样的情况,如果参数传入为0那么会列出如下:
也就是说,利用上面的原理,就可以把复杂的查询条件串联起来,并且,这样的查询条件修改的时候,实际的查询并没有在数据库中操作。
Named Scopes
下面我们看看在Rails 3中named scopes的变化。假如,在Article下有两个named scopes,visible用来表示隐藏的文章,published用来表示已经发布的文章。
上面的语句是Rails 2中定义named scoped的方式,在Rails 3中named scoped的语法稍微有点不同。首先是用scoped代替named scoped,其次,和find的变化相同,不再使用find的哈希参数,而是改用同名的方法,而conditions会变成where如下:
另外一个关于scope的新功能是可以通过scope创建scope,例如,我们希望创建一个叫做recent的scope,表示发布过并且没有隐藏的文章列表,并且文章列表按照发布的降序排列。那么,我们就可以通过使用visible和pulished来实现如下:
如上所示,我们就是通过将两个scopes连起来,并且添加一个排序的方法来创建scope的。而且,我们也可以通过在控制台调试我们的scope,发现当我们调用Article.recent时,会返回一个ActiveRecord::NamedScope::Scope的对象,而这个对象会和ActiveRecord::Relation有相似的功能,即lazy loading不是当即查询。如下:
当我们查询所有时,我们将会看到对应的Article对象返回。(译者晓夜注:就是说在用的时候返回)
有用的工具
最后,我们将使用一点有用的工具方法结束本篇的介绍。如果,我们得到了一个类似Relation 或者 Scope的对象(即缓存查询,并没有实际返回数据库查询结果的对象)我们可以通过to_sql来查看对应的查询条件,如下:
上面的查询将返回没有隐藏的最近发布的文章。这就是Rails 3中ActiveRecord查询部分的改进。同时Rails 3中对于controller部分也有一些语法变化,使得语法更简练强大。学习使用新的语法,你会发现这是值得的。
http://asciicasts.com/episodes/202-active-record-queries-in-rails-3
不是听译。。。。你看看这里。。。。。。
看来你平时看railscast不仔细啊。。。作者已经提到过这个网站了。。
有个叫做Asciicasts的已经把RailsCast的视频翻译成文本了,我们只是照文本翻译,哇牛是组织者。欢迎参加中文Ruby翻译团队,详情联系哇牛http://ywencn.iteye.com/
原来你们是一伙的..
有个叫做Asciicasts的已经把RailsCast的视频翻译成文本了,我们只是照文本翻译,哇牛是组织者。欢迎参加中文Ruby翻译团队,详情联系哇牛http://ywencn.iteye.com/
译者: 夜鸣猪(http://hlee.rubyeye.com/) 校对: 哇牛
在上两集的Railscast里我们演示了如何配置Rails 3的配置环境和创建新的Rails 3应用程序。在这一集里我们将开始演示Rails 3的一些新的功能,这里从ActiveRecord的新检索接口开始。Pratik Naik有篇blog文章是关于这个主题的很值得阅读。
基本的演示例子
首先,我们使用一个基本的例子对照演示。旧的ActiveRecord如何调用和转换成新的Rails 3下的ActiveRecord如何实现查询调用。假定我们有两个models,Article和Comment,他们之间有has_many:comments的关系。那么,当我们需要查询最近十条记录时会执行如下语句:
Article.find(:all, :order => "published_at desc", :limit => 10)
当我们把上面的语句转换能Rails 3时,最基本的原则是把查询中的哈希参数替换成对应的方法,以上语句转换如下:
Article.order("published_at desc").limit(10)
显然新的语法更简洁,可是,往往也不是所有的哈希参数都可以一点不变的转换成对应的方法,例如:
Article.find(:all, :conditions => ["published_at <= ?", Time.now], :include => :comments)
事实上,这条基本转换的规则(find的hash参数直接转换成同名的方法)只有两个例外,幸运的是上面的例子都包含了他们。上条语句是想要查询所有发布时间早于当前时间的文章和评论,在Rails 3里将会转成如下:
Article.where("published_at <= ?", Time.now).includes(:comments)
例外就是conditions变成了where,而include变成了复数形式includes。除此之外,所有其他在find中调用的方法,都可以完全和哈希参数同名。
本节最后,让我们看这样一个小例子,查询最近发表的一篇文章:
Article.find(:first, :order => "published_at desc")
在Rails 3中我们可以转换如下:
Article.order("published_at desc").first()
值得说明的是,我们要把first放到最后,而且,鉴于我们是降序查询,那么,写成如下也可以:
Article.order("published_at").last()
这样写的执行效率和上面是一样的,不过,看起来更简洁。
在Rails 3.0里我们可以同时使用上面的两种查询语法。从3.1开始老的查询语法开始作废,到3.2老的查询语法将被完全移除。所以,为了将来考虑早点把老的语法替换掉是值得的。
或者,大家会怀疑为什么要破坏向下兼容的进行这样的语法兼容性修改。进行这样的语法升级的目的在于下面我们将要解释的Lazy Loading。
Lazy Loading
为了演示Lazy loading我们将使用Rails的控制台,查询所有的文章得到数组对象,如下:
ruby-1.9.1-p378 > Article.all => [#<Article id: 1, name: "It's Ancient", published_at: nil, hidden: false, created_at: "2010-02-22 20:35:42", updated_at: "2010-02-22 20:35:42">, #<Article id: 2, name: "Can't See Me", published_at: nil, hidden: false, created_at: "2010-02-22 20:37:03", updated_at: "2010-02-22 20:37:03">, #<Article id: 3, name: "To the Future!", published_at: nil, hidden: false, created_at: "2010-02-22 20:38:17", updated_at: "2010-02-22 20:38:17">]
如果,我们希望把得到的文章按照文章名字进行排序,可以使用如下方法:
ruby-1.9.1-p378 > articles = Article.order("name") => #<ActiveRecord::Relation:0x00000101669b90 @table=#<Arel::Table:0x000001023e9af8 @name="articles", @options={:engine=>#<Arel::Sql::Engine:0x000001023a15c8 @ar=ActiveRecord::Base, @adapter_name="SQLite">}, @engine=#<Arel::Sql::Engine:0x000001023a15c8 @ar=ActiveRecord::Base, @adapter_name="SQLite">, …
这时我们会发现查询返回值不是Article的数组对象,而是一个ActiveRecord::Relation的对象。这个对象保存了我们希望进行的查询条件信息,但是数据库并没有实际执行这个查询操作。这就是我们在本篇里所说的Lazy Loading,即除非真正使用这些数据,否则实际的查询就不进行。例如,我们进行迭代或者是调用显示第一条记录,那么,这个数据库的查询就会真正执行,如下:
ruby-1.9.1-p378 > articles.first => #<Article id: 2, name: "Can't See Me", published_at: nil, hidden: false, created_at: "2010-02-22 20:37:03", updated_at: "2010-02-22 20:37:03">
那么,让我们看看Lazy Loading对于我们的应用有什么作用。如果我们用scaffold来生产Model那么我们应该有会得到一个对应的articles的控制器,并且包含最基本的7个方法。其中,也包括index的方法是用Article.all来立即得到数据:
#/app/controllers/articles_controller.rb def index @articles = Article.all respond_to do |format| format.html # index.html.erb format.xml { render :xml => @articles } end end
然而,如果这时我们使用的是Rails 3的语法并且对article使用了任何一种find的参数,例如按照文章名排序。这时Article.order(“name”)就会返回ActiveRecord::Relation的对象并且,实际的数据库查询不会在controller调用的时候执行。而是,在view页面进行迭代输出的时候执行。(译者晓夜注:这就是Lazy Loading的标准含义,减少触发时的等待时间,也就是降低返回空白页的等待可能。当然,下文还提到了Lazy Loading别的好处。)
#/app/views/articles/index.html.erb <% @articles.each do |article| %> <tr> <td><%= article.name %></td> <td><%= article.published_at %></td> <td><%= article.hidden %></td> <td><%= link_to 'Show', article %></td> <td><%= link_to 'Edit', edit_article_path(article) %></td> <td><%= link_to 'Destroy', article, :confirm => 'Are you sure?', :method => :delete %></td> </tr> <% end %>
这时我们就会看到按照文章名排序的列表。
Lazy Loading的好处也在于当view开启了fragment caching的时候,这时,数据库因为缓存,有些时候查询就不用实际执行。新的查询语法更容易构建查询条件,例如,我们希望检索只有设置了隐藏属性(hidden==1)的记录,那么,我们可以如下修改index方法:
#/app/controllers/articles_controller.rb def index @articles = Article.order('name') if params[:hidden] @articles = @articles.where(:hidden =>(params[:hidden] == "1")) end respond_to do |format| format.html # index.html.erb format.xml { render :xml => @articles } end end
这时,该方法会检查是否有hidden的参数传入,并且根据参数情况显示如下:
同样的情况,如果参数传入为0那么会列出如下:
也就是说,利用上面的原理,就可以把复杂的查询条件串联起来,并且,这样的查询条件修改的时候,实际的查询并没有在数据库中操作。
Named Scopes
下面我们看看在Rails 3中named scopes的变化。假如,在Article下有两个named scopes,visible用来表示隐藏的文章,published用来表示已经发布的文章。
#/app/models/article.rb class Article < ActiveRecord::Base named_scope :visible, :conditions => ["hidden != ?", true] named_scope :published, lambda { {:conditions => ["published_at <= ?", Time.zone.now]} } end
上面的语句是Rails 2中定义named scoped的方式,在Rails 3中named scoped的语法稍微有点不同。首先是用scoped代替named scoped,其次,和find的变化相同,不再使用find的哈希参数,而是改用同名的方法,而conditions会变成where如下:
#/app/models/article.rb class Article < ActiveRecord::Base scope :visible, where("hidden != ?", true) scope :published, lambda { where("published_at <= ?", Time.zone.now) } end
另外一个关于scope的新功能是可以通过scope创建scope,例如,我们希望创建一个叫做recent的scope,表示发布过并且没有隐藏的文章列表,并且文章列表按照发布的降序排列。那么,我们就可以通过使用visible和pulished来实现如下:
scope :recent, visible.published.order("published_at desc")
如上所示,我们就是通过将两个scopes连起来,并且添加一个排序的方法来创建scope的。而且,我们也可以通过在控制台调试我们的scope,发现当我们调用Article.recent时,会返回一个ActiveRecord::NamedScope::Scope的对象,而这个对象会和ActiveRecord::Relation有相似的功能,即lazy loading不是当即查询。如下:
ruby-1.9.1-p378 > Article.recent => #<ActiveRecord::NamedScope::Scope:0x0000010318bd08 @table=#<Arel::Table:0x00000102740ea8 @name="articles", @options={:engine=>#<Arel::Sql::Engine:0x00000102651900 @ar=ActiveRecord::Base>}, @engine=#<Arel::Sql::Engine:0x00000102651900 @ar=ActiveRecord::Base>>, …
当我们查询所有时,我们将会看到对应的Article对象返回。(译者晓夜注:就是说在用的时候返回)
ruby-1.9.1-p378 > Article.recent.all => [#<Article id: 1, name: "It's Ancient", published_at: "2010-01-01", hidden: false, created_at: "2010-02-22 20:35:42", updated_at: "2010-02-22 23:00:16">]
有用的工具
最后,我们将使用一点有用的工具方法结束本篇的介绍。如果,我们得到了一个类似Relation 或者 Scope的对象(即缓存查询,并没有实际返回数据库查询结果的对象)我们可以通过to_sql来查看对应的查询条件,如下:
ruby-1.9.1-p378 > Article.recent.to_sql => "SELECT \"articles\".* FROM \"articles\" WHERE (hidden != 't') AND (published_at <= '2010-02-22 22:47:12.023289') ORDER BY published_at desc"
上面的查询将返回没有隐藏的最近发布的文章。这就是Rails 3中ActiveRecord查询部分的改进。同时Rails 3中对于controller部分也有一些语法变化,使得语法更简练强大。学习使用新的语法,你会发现这是值得的。
评论
6 楼
hexawing
2011-02-25
好赞好赞好赞的文章……不好意思我激动了……
5 楼
orcl_zhang
2010-03-05
darkbaby123 写道
LZ是照RailsCast上的视频听译的吗?厉害!
http://asciicasts.com/episodes/202-active-record-queries-in-rails-3
不是听译。。。。你看看这里。。。。。。
看来你平时看railscast不仔细啊。。。作者已经提到过这个网站了。。
4 楼
yuan
2010-03-05
夜鸣猪 写道
darkbaby123 写道
LZ是照RailsCast上的视频听译的吗?厉害!
有个叫做Asciicasts的已经把RailsCast的视频翻译成文本了,我们只是照文本翻译,哇牛是组织者。欢迎参加中文Ruby翻译团队,详情联系哇牛http://ywencn.iteye.com/
原来你们是一伙的..
3 楼
夜鸣猪
2010-03-05
darkbaby123 写道
LZ是照RailsCast上的视频听译的吗?厉害!
有个叫做Asciicasts的已经把RailsCast的视频翻译成文本了,我们只是照文本翻译,哇牛是组织者。欢迎参加中文Ruby翻译团队,详情联系哇牛http://ywencn.iteye.com/
2 楼
darkbaby123
2010-03-04
LZ是照RailsCast上的视频听译的吗?厉害!
1 楼
yuan
2010-02-26
做个链接过去
发表评论
-
Destroying a Postgres DB on Heroku
2013-04-24 10:58 932heroku pg:reset DATABASE -
VIM ctags setup ack
2012-04-17 22:13 3256reference ctags --extra=+f --e ... -
alias_method_chain方法在3.1以后的替代使用方式
2012-02-04 02:14 3290alias_method_chain() 是rails里的一个 ... -
一些快速解决的问题
2012-01-19 12:35 1470问题如下: 引用Could not open library ... -
API service 安全问题
2011-12-04 08:47 1382这是一个长期关注的课题 rest api Service的 ... -
Module方法调用好不好
2011-11-20 01:58 1345以前说,用module给class加singleton方法,和 ... -
一个ajax和rails交互的例子
2011-11-19 01:53 1903首先,这里用了一个,query信息解析的包,如下 https: ... -
Rails 返回hash给javascript
2011-11-19 01:43 2275这是一个特别的,不太正统的需求, 因为,大部分时候,ajax的 ... -
关于Rubymine
2011-11-18 23:21 2266开个帖子收集有关使用上的问题 前一段时间,看到半价就买了。想 ... -
ruby中和javascript中,动态方法的创建
2011-11-18 21:01 1237class Klass def hello(*args) ... -
textmate快捷键 汇总
2011-11-16 07:20 8139TextMate 列编辑模式 按住 Alt 键,用鼠标选择要 ... -
Ruby面试系列六,面试继续面试
2011-11-15 05:55 2019刚才受到打击了,充分报漏了自己基础不扎实,不肯向虎炮等兄弟学习 ... -
说说sharding
2011-11-13 00:53 1488这个东西一面试就有人 ... -
rails面试碎碎念
2011-11-12 23:51 1943面试继续面试 又有问ru ... -
最通常的git push reject 和non-fast forward是因为
2011-11-12 23:29 17212git push To git@github.com:use ... -
Rails 自身的many to many关系 self has_many
2011-11-12 01:43 2733简单点的 #注意外键在person上people: id ... -
Rails 3下的 in place editor edit in place
2011-11-12 01:20 945第一个版本 http://code.google.com/p ... -
Heroku 的诡异问题集合
2011-11-11 07:22 1693开个Post记录,在用heroku过程中的一些诡异问题和要注意 ... -
SCSS 和 SASS 和 HAML 和CoffeeScript
2011-11-07 07:52 12954Asset Pipeline 提供了内建 ... -
Invalid gemspec because of the date format in specification
2011-11-07 02:14 2116又是这个date format的错误。 上次出错忘了,记录下 ...
相关推荐
在Rails 3中,Active Record查询接口发生了显著的变化,这些变化主要是为了提高代码的可读性和性能,引入了懒加载(Lazy Loading)的概念。本文将详细介绍这些查询方式的转变及其背后的动机。 首先,我们注意到旧版...
active_record_upsert, Rails 5/Active Record 5的更新更新 ActiveRecordUpsertpostgre 9.5 和 Rails 5/ActiveRecord 5的真正更新。 在冲突时使用进行更新。的主要点是否在单个记录上使用 ON CONFLICT DO U
Databases with Ruby and Rails》是一本深入探讨Ruby on Rails框架中Active Record库的专著。这本书详细阐述了如何利用Ruby语言和Rails框架来高效地处理数据库操作,帮助开发者理解并掌握数据库与Web应用之间的紧密...
- **Rails中的Active Record集成**:接着探讨了Rails框架中Active Record的集成与使用方法,包括模型定义、查询构建等核心功能。 ##### 第二部分:高级数据库管理技术 - **高级查询技巧**:通过实例演示了如何编写...
Ruby on Rails Guides_ A Guide to Active Record Associations.pdf
Active Record是Ruby on Rails框架中的一个核心组件,它将数据库操作封装在对象中,使得数据库访问变得简单而直观。在MVC架构中,Active Record作为模型层的一部分,负责与数据库进行交互。 1. **数据库映射**: ...
rails generate active_record:session_migration 运行迁移: rake db:migrate 然后,在config/initializers/session_store.rb设置会话存储: Rails . application . config . session_store :active_record_...
在Rails的开发控制台和日志中显示每个查询的回溯。 允许您跟踪应用程序中查询的执行位置。 对于性能优化以及在对大型应用程序进行更改时查找从哪里开始有用。 启用后,每个查询都会记录如下: D, [2019-03-03T19:...
3. **查询API**:详述Active Record查询接口,包括链式查询、关联(associations)、条件查询、聚合函数等。 4. **模型关系**:讲解一对一、一对多、多对多等关系的建立与管理,以及如何通过关联进行数据检索。 5....
总结,RecordCache是Rails 3中提高性能的一个强大工具,尤其适合那些频繁查询特定Active Record模型的应用程序。通过合理利用RecordCache,开发者可以优化数据库交互,提升用户体验,同时保持代码的简洁性。在实际...
ActiveRecordUpsert PostgreSQL 9.5+和Rails 5+ / ActiveRecord 5+的真实更新。 使用 。 要点 使用ON CONFLICT DO UPDATE在单个记录... gem 'active_record_upsert' 然后执行: $ bundle 或将其自己安装为: $ gem
Active Record是Ruby on Rails框架中的一个核心组件,它实现了对象关系映射(ORM)系统,使得开发者能够以面向对象的方式处理数据库操作。在.NET环境中,虽然没有原生的Active Record库,但存在类似的概念和库,如...
- **Active Record**:Rails 3 使用 Active Record 模式来处理数据库交互,提供了一种声明式的接口来操作数据库记录。 - **关联关系**:支持多种关联关系,如一对一、一对多、多对多等,使得数据模型之间的关系更加...
该gem为Active Record查询对象添加了一个analyze方法。 它对查询SQL执行EXPLAIN ANALYZE 。 您可以查看此博客文章,以获取有关如何更多信息。 支持以下format选项:json, :hash, :yaml, :text, :xml 。 :json格式...
- 对Rails 3中的高级特性和最佳实践有所了解。 综上所述,《Beginning Rails 3》是一本非常适合Ruby on Rails初学者的入门书籍,不仅覆盖了Rails 3的基础知识,还包含了大量实用案例和技巧,能够帮助读者快速成长为...
- **作用**:通过Active Record,开发者可以直接在模型类中定义数据表的字段和关系,而无需编写复杂的SQL查询语句。 #### 二、验证 - **定义**:验证是在保存数据之前对模型进行检查的过程,确保数据符合预期的...
在Rails 2.0中,Active Record是ORM(对象关系映射)的一部分,它使得Ruby类可以直接与数据库表进行交互。每个Active Record类都代表一个数据库表,类的实例对应表中的行,类的属性对应列。Active Record提供了许多...
Rails 4.0.0中的Active Record进行了优化,提升了查询性能。引入了`find_by`和`find_or_create_by`等简洁的方法,使得数据库操作更加方便。同时,`update_all`和`destroy_all`方法现在可以直接接收SQL片段,提供了...