`
hozaka
  • 浏览: 39037 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

ActiveRecord 中的 include 关系

阅读更多

对 include 很多开发者避而不谈,也有很多人趋之若骛。其实归根结底只是生成了不同的 SQL 语句。至于造成的影响,见人见智,当然和项目的需求有很大的关系。

但是有一点,include 既不是天使也不是恶魔。

合理的使用 include 可以避免 N+1 的问题,但是 Rails 生成的 SQL 确实不怎么好看……而且今天还发现了一个问题:

A 中声明了一个关系

has_many :items, :order => 'some_time_field DESC'

但是在执行 A.find(123, :include => :items) 的时候,可以发现对象的 items 集合并没有按照预想的顺序排列,查看 log 中的 SQL 记录,发现 order 子句并不在里面。

暂且归结为 BUG 或者未完成状态吧……

分享到:
评论
1 楼 wtb 2008-12-05  
这不是bug
看看find的源码
如果不是find某id并且也不是:first/:last时,则调用的是find_every,而every中处理了没有include选项的事.
但是,find某id的时候是直接调用的find_by_ids方法,这方法中没有处理:include选项(或者说直接忽略了)

相关推荐

    activerecord-relations_annotations:使用自定义数据注释 ActiveRecord 关系对象

    关系注解使用自定义数据注释 ActiveRecord 关系对象,允许关系的元数据可用于自定义代码。安装将此行添加到应用程序的 Gemfile 中: gem 'activerecord-relations_annotations' , '~> 0.0.1' 然后执行: $ bundle...

    Ruby-Unread管理ActiveRecord对象的已读未读状态

    在Rails中,ActiveRecord是ORM(对象关系映射)库,它负责连接数据库并允许开发者用Ruby代码操作数据。本文将深入探讨如何使用"Ruby-Unread"这个库来管理ActiveRecord对象的已读/未读状态。 "Ruby-Unread"是一个...

    Ruby-SearchCop为ActiveRecord提供类似搜索引擎的全文查询支持

    在Ruby on Rails开发中,ActiveRecord是常用的ORM(对象关系映射)工具,它允许开发者用面向对象的方式操作数据库。然而,标准的ActiveRecord查询并不总是满足复杂的全文搜索需求。这时,`SearchCop`应运而生,它是...

    redis_attributes:使用存储在 Redis 而不是关系数据库中的属性来注释 ActiveRecord 对象的简单方法

    redis_attributes 使用存储在 Redis 而不是关系数据库中的属性来注释 ActiveRecord 对象的简单方法。安装将此行添加到应用程序的 Gemfile 中: gem 'redis_attributes'然后执行: $ bundle install用法...

    Rails3的ActiveRecord 查询API.doc

    在 Rails 2.x 中,许多使用哈希参数的查询方法如 `:conditions`, `:include`, `:joins` 等在 Rails 3.1 中被标记为过时,虽然在3.1版本中仍然可用,但计划在 Rails 3.2 中完全移除。这些变化主要是为了引入一个新的...

    Ruby-pgsearch利用PostgreSQL的全文搜索构建ActiveRecord的命名空间

    PostgreSQL是一个功能强大的开源关系型数据库系统,其内建的全文搜索功能支持分词、排名、拼写纠正等多种特性。它通过TSearch2(文本搜索引擎)实现了这些功能,可以处理多种语言,并提供了高度可定制的搜索配置。 ...

    jsonapi-scopes:这个gem允许您根据请求,按照JSON过滤和排序ActiveRecord关系

    该gem提供了一组方法,使您可以根据请求包括,过滤和排序ActiveRecord关系。 它被构建为一个简单,健壮和可扩展的系统。 它尽可能遵循。 这也是一个可以帮助您遵循JSON:API specification解决方案。 它不在乎您要...

    active_record-pgcrypto:PostgreSQL PGCrypto对ActiveRecord的支持

    在Ruby on Rails开发中,ActiveRecord是一个非常关键的组件,它是ORM(对象关系映射)框架,使得开发者可以用面向对象的方式来操作数据库。而`active_record-pgcrypto`是针对PostgreSQL数据库的一个扩展,它提供了对...

    ruby on rails对mongodb的操作

    在Ruby on Rails框架中,开发人员经常选择使用关系型数据库如SQLite、PostgreSQL或MySQL来存储数据。然而,随着NoSQL数据库的兴起,MongoDB因其灵活性和非结构化数据处理能力,也成为了许多Web应用程序的选择。本文...

    Ruby-MongoMapper针对Mongo的一个Ruby对象映射器

    MongoMapper是Ruby社区中用于MongoDB数据库的一种对象关系映射(ORM)框架,它为开发者提供了与MongoDB交互的简洁而强大的接口。MongoDB是一种非关系型数据库(NoSQL),以其灵活性、高可用性和高性能而受到青睐。...

    Rails 中页面中常用函数

    3. **ActiveRecord对象和关系**: 如果`@items`是`Item`模型的一个实例,那么它可能是从数据库中查询得到的记录集。Rails的ActiveRecord提供了与数据库交互的简便方式,如`Item.all`或`Item.where(condition)`,...

    tenacity:一种独立于数据库客户端的管理不同数据库支持的模型之间关系的方式

    因此,编写管理由不同数据库支持的对象之间的关系的代码并不像编写代码来管理同一数据库中的对象之间的关系那么容易。 Tenacity 旨在通过提供一种独立于数据库客户端的方式来管理由不同数据库支持的模型之间的关系...

    Ruby on Rails: the scope method

    - **关联查询**:在具有关联关系的模型中,可以通过定义`scope`来查询与当前模型相关的记录。 - **控制器中的使用**:可以在控制器中使用`scope`来进一步过滤或处理查询结果,例如通过`has_scope` gem来实现基于HTTP...

    Ruby-IdentityCacheActiveRecord的一个blob级缓存解决方案

    它的工作原理是,将ActiveRecord模型实例直接存储在内存中,当查询相同的数据时,不再执行数据库查询,而是直接从缓存中获取。这大大减少了数据库的负载,并提高了应用程序的整体性能。 **二、Blob级缓存** Blob级...

    Rails 3中的Active Record的查询变化.doc

    但在Rails 3中,`Article.all`返回的是一个`ActiveRecord::Relation`对象,它并不会立即执行查询,而是在真正需要数据时才执行,这就是所谓的懒加载。这种机制可以避免不必要的数据库操作,提高应用性能。 例如,...

    nihilist:Nigilist Ruby gem —应用程序中用户模型的空对象

    它允许 null 对象为所有问题方法返回false ,为所有非 bang 方法返回nil为所有复数形式的方法(以及在 Ruby on Rails 中为同名 ActiveRecord 模型提供空关系)返回[] ,而无需定义它们。 安装 gem install nigilist...

    Ruby-HappyMapper允许您快速轻松地解析XML数据并将其转换成ruby的数据结构

    通过定义嵌套的类和使用`has_one`或`has_many`方法,我们可以方便地处理XML文档中的复杂关系。 例如,如果有多个用户在同一个XML文档中,可以定义一个`UserList`类来处理: ```ruby class UserList include ...

    rails_admin_content_builder:使用rails_admin创建内容的简单方法

    依存关系 MiniMagick 支持的ORM ActiveRecord 支持的资产插件 CarrierWave 安装 使用rails <5和TurboLink <5进行测试 将此行添加到您的应用程序的Gemfile中: gem 'rails_admin' gem 'rails_admin_content...

    Ruby语言中文教程

    Rails的许多约定优于配置的设计原则,如ActiveRecord对象关系映射,使得数据库操作变得简单。 本教程的PDF版包含了详细的章节,从基础语法到高级特性,覆盖了Ruby的方方面面。页面设计清晰,目录详尽,便于读者按需...

    Laravel开发-db-blade-compiler

    `@include`指令可以将它们嵌入到主模板中。此外,Blade还支持模板继承,通过`@extends`定义父模板,并使用`@section`和`@yield`来定义和填充内容区域。 7. **Blade的动态内容与事件**:通过`@isset`,`@empty`,`@...

Global site tag (gtag.js) - Google Analytics