看这个页面代码:
<% for task in @tasks %>
<%= link_to task.name, task_path(task) %> in <%= task.project.name %>
<% end %>
上面的代码对每个task对象,取得project的name属性并显示,看看log:
Project Lood (0.000131) SELECT * FROM projects WHERE (projects.id = 330)
Project Lood (0.000156) SELECT * FROM projects WHERE (projects.id = 330)
Project Lood (0.000136) SELECT * FROM projects WHERE (projects.id = 330)
Project Lood (0.000138) SELECT * FROM projects WHERE (projects.id = 330)
Project Lood (0.000133) SELECT * FROM projects WHERE (projects.id = 330)
Project Lood (0.000128) SELECT * FROM projects WHERE (projects.id = 330)
...
Completed in 0.14792 (6 reqs/sec) | ...
由于ActiveRecord默认是延迟加载的,这样对每个task对象去取project对象时又会查询一次数据库
对于这种情况,我们使用eager loading就比较合适了:
class TasksController < ApplicationController
def index
@tasks = Task.find(:all, :include => :project)
end
end
:include指定我们将project属性一起查询出来,我们再看看log:
Task Lood Including Associations (0.000681) SELECT tasks.'id' AS t0_r0, tasks.'name' AS t0_r1, tasks.'project_id' AS
t0_r2, projects.'id' AS t1_r0, projects.'name' AS t1_r1 FROM tasks LEFT OUTER JOIN projects ON projects.id = tasks.pro
ject_id
...
Completed in 0.03464 (28 reqs/sec) | ...
分享到:
相关推荐
Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails ...
使用Rails构建可伸缩和可维护API的最佳方法
Ruby.on.Rails.Tutorial,Learn.Web.Development.with.Rails,Third.Edition-中文版 文字版.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
《Rails之道》按照Rails的各个子系统进行组织编排,分别介绍了Rails的环境、初始过程、配置和日志记录,Rails的分配器、控制器、页面生成和路由,REST、资源和Rails,ActiveRecord的基础、关联、验证和高级技巧,...
webpack-rails, 将 web pack与你的Ruby on Rails 应用程序集成 不再维护webpack-rails 不再被维护。 有关详细信息,请参阅 #90. web pack-railsweb pack 为你提供了将 web pack集成到现有的Ruby on Rails 应用程序中...
NULL 博文链接:https://lzqustc.iteye.com/blog/439128
[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 必备之宝典
minitest-rails, Rails的Minitest集成 minitestRails 5的Minitest集成 安装gem install minitest-rails这将安装以下宝石:minitest配置创建一个新的Rail
Ruby on Rails Guides v2 - Ruby on Rails 4.2.5
提供用于Rails 4.x(及更高版本)资产管道的Sprockets实现。 安装 gem 'sprockets-rails' , :require => 'sprockets/railtie' 或者,如果禁用了Bundler自动请求功能,则在config/application.rb require 'sprockets...
Component-Based Rails Applications: Large Domains Under Control (Addison-Wesley Professional Ruby Series) By 作者: Stephan Hagemann ISBN-10 书号: 0134774582 ISBN-13 书号: 9780134774589 Edition 版本: ...
迷你轨道与Rails 6.1的Minitest集成安装gem install minitest-rails 这将安装以下gem: minitest配置创建一个新的Rails应用程序: rails new MyApp 选择一个版本如果您正在运行Rails 6.x,请在Gemfile中指定相应的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 ...
本书教您如何使用Ruby on Rails开发和部署真正的,具有工业实力的Web应用程序,Ruby on Rails是为诸如Twitter,Hulu,GitHub和Yellow Pages等顶级网站提供支持的开源Web框架。
rails5-docker-alpine:使用Alpine Linux的Rails轻量级Docker开发环境
gem "mongoid_rails_migrations" 如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:migrate:up VERSION= $ rails db:rollback...
Rails Admin枚举4 Rails Admin插件,用于正确查看Rails 4.1枚举 安装 gem 'rails_admin_enum4', github: 'sibext/rails_admin_enum4' bundle install 用法 通过生成器生成新模型: rails g model Sibext service:...
《Rails之道》详细讨论了Rails的程序代码并通过分析Rails中的代码片段来深入解释它的功能,同时,《Rails之道》部分章节也摘录了一些API文档中的内容,使读者能够快速地找到对应的API文档、相关的示例代码以及深入的...