Rails ActiveRecord 如何在没有多个查询的情况下链接“where”子句?

2023-11-29

我是一名 PHP 开发人员,正在学习 Ruby on Rails 的强大功能,我很喜欢 ActiveRecord,并且注意到一些非常有趣的事情,这就是 ActiveRecord 方法如何检测方法链的末尾以执行查询。

@person = Person.where(name: 'Jason').where(age: 26)

# In my humble imagination I'd think that each where() executes a database query
# But in reality, it doesn't until the last method in the chain

这个魔法是如何运作的?


The where方法返回一个ActiveRecord::Relation对象,并且该对象本身不发出数据库查询。它是where你使用这个重要的对象。

在控制台中,您可能会这样做:

@person = Person.where(name: "Jason")

进而blammo它发出一个数据库查询并返回一个似乎是名为 Jason 的每个人的数组。耶,活动记录!

但然后你做了这样的事情:

@person = Person.where(name: "Jason").where(age: 26)

然后会发出另一个查询,但这个查询是针对 26 岁、名叫 Jason 的人的。但这只是发出one查询,那么另一个查询去哪里了?


正如其他人所建议的,发生这种情况是因为where方法返回一个代理对象。它实际上并不执行查询并返回数据集,除非要求这样做。

当你跑步时anything在控制台中,它将输出您运行的任何结果的检查版本。如果你把1在控制台中按 Enter 键,你会得到1回来因为1.inspect is 1。魔法!同样适用于"1"。其他各种物体没有inspect定义了方法,因此 Ruby 又回到了Object返回一些东西ghastly like <Object#23adbf42560>.

每一个ActiveRecord::Relation对象有inspect其上定义的方法,以便引发查询。当您在控制台中编写查询时,IRB 将调用inspect根据该查询的返回值并输出一些几乎人类可读的内容,例如您看到的数组。


如果您只是在标准 Ruby 脚本中发出此命令,那么在检查对象之前不会执行任何查询(通过inspect)或通过使用迭代each,或者有to_a方法调用它。

直到这三件事之一发生之前​​,你可以链接尽可能多的where根据您的喜好对其进行陈述,然后当您do call inspect, to_a or each然后它最终会执行该查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails ActiveRecord 如何在没有多个查询的情况下链接“where”子句? 的相关文章

  • Ruby on Rails:如何检查复数形式和单一形式的名称

    我用命令创建了一个匿名模型 rails g model Anonymous section id integer aid string fake bool active bool 但迁移中的表名称为匿名 class CreateAnonym
  • 如何在Rails中管理没有id的表?

    我有两个模型 人模型和关系模型 第二个存储有关两个人之间关系的信息 它有parent id和child id字段 但没有id字段 我将它与 has many through 连接起来并且它有效 But 即使表中存在某些关系 因为没有 id
  • Rails 命令有什么区别:--no-test-framework、--skip-test-unit 和 -T?

    原本我以为这三者都是一样的 但现在仔细一看 却发现它们各有不同 我通过搜索找不到任何关于此的好的文档 根据导轨API http api rubyonrails org classes Rails Generators Base html a
  • 脚本标头过早结束:媒体(与以下问题相关:rails 应用程序部署+passenger+ubuntu+apache)

    我刚刚设置了一个 linode 服务器并在其上部署了我的 Rails 3 应用程序 它已启动并正在运行 问题是某些图像没有显示在生产中 在本地 它们工作正常 我仔细检查了日志文件 生产 log 但什么也没找到 然后我检查服务器 error
  • jQuery 自动完成滚动问题

    我在用着Rails3 jquery 自动完成 https github com crowdint rails3 jquery autocomplete在我的应用程序中 我遇到了以下问题 如果您在输入字段中输入某些内容以便显示自动完成数据并在
  • 'rails new' 创建一个 'validate_default_type!':选项的默认值必须与其类型匹配。 (参数错误)错误

    我正在尝试创建一个新的 Ruby on Rails 应用程序 每次我输入rails new之后 我收到此错误 usr local lib ruby gems 2 2 0 gems thor 0 19 2 lib thor parser op
  • 按共同关联的数量排序 (Rails)

    背景 我有帖子和用户 并且都有很多社区 客观的 对于任何给定的用户 我想返回一个帖子集合 按该帖子与该用户有共同社区的数量排序 具有更多共同社区的帖子位于更高的位置 我当前的尝试 使用排序方法 有效 Post includes commun
  • 安装了 Rails 但它说我没有:)

    我刚刚执行了这个命令来安装 Rails gem install rails 它似乎运行良好并安装了东西 然后当我按照本教程进行操作时 http guides rubyonrails org getting started html http
  • Capistrano 无法定位应用程序部署中的 Gemfile 错误

    我正在尝试将 Rails 应用程序部署到生产服务器 并决定使用以下命令将其部署到 DigitalOcean本指南 https gorails com deploy ubuntu 14 04 overview RVM 要部署 我使用以下命令
  • 将 Rails 5.2 升级到 6.0 时出现参数错误数量错误

    我正在尝试将旧站点从 Rails5 2 升级到 6 0 然后再升级到 6 1 推荐的路径 我收到了有关参数数量错误的各种错误 其中一些错误我已通过更新或删除各种 gem 设法清除 最后我被困在了这一点上 rbenv versions 3 0
  • 从 Rails 2.3.8 升级到 4.0

    我正在 Rails 2 3 8 上运行一个应用程序 我计划将其升级到 Rails 4 0 RC 版 对我来说最简单的方法是什么 我需要先升级到 Rails 3 x 吗 注意 在我当前的实现中 我使用八哥和雪貂 作为升级的一部分 我也在考虑搬
  • 初始化会破坏rails中的布局设置吗?

    在其中一个控制器中 我需要特定的布局 我添加了layout一开始 效果很好 但如果我添加一个initialize某些基于控制器的变量的函数 Rails 似乎只是忽略了layout命令 有人有同样的问题吗 我该如何修复它 class Admi
  • Rails 查询连接关联表与别名

    我有一个模型Edge属于另一个模型Node通过不同的外键两次 def Edge lt ActiveRecord Base belongs to first class name Node belongs to second class na
  • S3 的 Rails 回形针默认图像

    我尝试在应用程序中使用default url 但我使用S3 存储图像 我不确定我需要在那里输入什么 URL 或者我是否必须创建一个假图像才能将所有内容放在那里 由于我的图像总是通过 S3 渲染 所以我不知道如果我只是在公共文件夹中放入一些默
  • 从轨道控制器返回

    这是一个初学者 Rails 问题 我这样做之后 format xml head ok 如何从控制器端点返回而不显示视图 如果我此时放弃函数的末尾 我会得到我所期望的结果 但如果我调用 返回 我最终会进入视图 或者在我的情况下会出现缺少的视图
  • 如何访问 has_many :through 关联对象的相关连接模型而不需要额外的查询?

    这是我现在已经遇到过很多次的事情 我很想弄清楚如何做我想要的事情 或者构建并向 Rails 提交一个补丁来实现它 很多时候 在我的应用程序中 我会有一些看起来像这样的模型 class User lt ActiveRecord Base ha
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • 如何访问“可以?”细胞内的方法?

    我在用着cancan and cells我的 ruby on rails 项目中的 gems 如何访问can 细胞内的方法 Thanks 我必须这样做 尝试 class MyCell lt Cell Rails include CanCan
  • Rails:验证字符串的最小和最大长度,但允许其为空白

    我有一个想要验证的字段 我希望该字段能够留空 但如果用户输入数据 我希望它采用某种格式 目前我在模型中使用以下验证 但这不允许用户将其留空 validates length of foo maximum gt 5 validates len
  • 如何在保存父对象时确保子对象有效?

    假设我有两堂课 class User attr accessible name has one address validates name presence gt true validates associated address end

随机推荐

  • 在mfc中绘制背景

    我正在尝试使用 MFC 库在 C 中绘制窗口的背景 我必须使用这个框架 因为我正在开发 MFC 应用程序 我尝试了几种不同的方法 但无法使其发挥作用 所以我最近打开了一个空白项目 只是想弄清楚如何绘制背景 但它不起作用 任何帮助都会很棒 这
  • 如何解决从另一个实体(JPA)继承的实体的“未指定主键”?

    我想要一个所有文档类型都通用的超类 Entity public abstract class Doc implements Serializable Id GeneratedValue strategy GenerationType IDE
  • 如何在单个图中绘制多个seaborn.distplot

    我想绘制多个seaborndistplot在同一窗口下 每个图都有相同的 x 和 y 网格 我的尝试如下所示 但不起作用 function to plot the density curve of the 200 Median Stn MC
  • 避免打开模板参数

    简化后我有以下类层次结构 class BaseVec public BaseVec virtual BaseVec virtual double get double int i const 0 template
  • 在 R 中绘制连续函数

    我会如何绘制类似的东西y a b在 R 中 其中y等于某个常数并且a b gt 0 So a b 5例如 它绘制该线的位置 我只见过传递值列表a and b和绘图y根据这些值 不绘制连续曲线 f lt function a b a b 我该
  • ModuleNotFoundError:没有名为“psycopg2._psycopg”的模块

    我正在使用进口 导入psycopg2 但是在本地运行代码时 我面临一个问题 从 psycopg2 psycopg 导入 ModuleNotFoundError 没有名为 psycopg2 psycopg 的模块 我已经使用 cmd pip
  • 如何修复应用程序不响应?

    我已经准备好了绘画应用程序 我的应用程序包含一个用于绘画的自定义视图 当我们在自定义视图中绘制任何内容时 只需收集绘制的像素并存储在数组列表中 第一次它工作正常 但需要很多时间 第二次 活动 MyAlphabets 在应用程序 MyAlph
  • C# - 网站 - SQL Select 语句

    我想使用 select 语句来查找是否存在已存在的记录 我已将代码放在下面 但它在 dReader comm ExecuteReader 处引发错误我不确定为什么 有什么帮助吗 string connString Data Source K
  • 在 AS3 中隐藏按钮?

    我有一个名为 myBtn 的按钮 在第一帧的操作中 我尝试了以下两种方法 myBtn visibility false myBtn enabled false 两者都给我同样的错误 1120 访问未定义的属性 myBtn 好的 有几种方法可
  • 如何使用网络摄像头扫描 WinUI 3 中的二维码?

    我正在尝试在 WinUI 3 中从网络摄像头扫描 QR 码 我已经安装了 ZXing 和 AForge Video 但这些库在 WinUI 3 中无法正常工作 是否有任何解决方案或更兼容的替代方案 ZXing 中兴网是一个端口 完全与平台无
  • 绑定到 Django Admin 的模型历史记录

    设置 我正在开发一个 Django 应用程序 它允许用户在数据库中创建一个对象 然后返回并根据需要进行编辑 Django 的管理站点保存通过管理站点对对象所做的更改的历史记录 问题 如何将我的应用程序挂接到管理站点的更改历史记录中 以便我可
  • lua 中的来回 UTC 日期

    我在将 lua 日期转换为时间戳然后从中获取原始日期时遇到问题 它确实适用于非 UTC 日期 但不适用于 UTC 目前我的示例代码是 local dt1 os date t print dt1 hour local dt2 os date
  • MySQL 错误 1349 我缺少什么?

    我正在获取 MySQL1349错误 但看起来错误似乎不正确 ERROR 1349 View s SELECT contains a subquery in the FROM clause 创建视图时可以没有任何子查询吗 这是我的 SQL C
  • Spark:当键是不可散列的numpy数组时如何“reduceByKey”?

    我有一个 键 值 元素的 RDD 键是 NumPy 数组 NumPy 数组不可散列 当我尝试执行以下操作时 这会导致问题reduceByKey手术 有没有办法为 Spark 上下文提供我的手动哈希函数 或者有没有其他方法可以解决这个问题 除
  • 如何将此 JSON 反序列化为对象?

    我正在尝试使用 JSON Net 将 JSON 对象反序列化为 C 对象 我想要创建的对象是MonthlyPerformance其中包含一个列表Type 其中包含一个列表Categories 其中又包含一个列表Funds 它们定义为 pub
  • HttpClient 在指定超时之前超时

    我正在使用 WP8 中的 HttpClient 并执行 Post 请求 我知道呼叫可能需要很长时间 因为我实际上是在模拟慢速网络场景 因此我设置了HttpClient Timeout相应地为5分钟 然而 我在 60 秒左右超时 我相信超时不
  • 将依赖项注入 Ember 模型

    我正在尝试将依赖项注入我的 Ember 模型中 https github com emberjs ember js issues 3670 表明此功能已禁用 通过链接访问https github com stefanpenner ember
  • 为什么我们可以从线程池线程修改表单标题? [复制]

    这个问题在这里已经有答案了 下面的等待任务尚未完成await点并且它不捕获 UI 上下文 这意味着后面的 UI 修改代码将在另一个线程 本例中为线程池线程 中调用 private async void Button1 Click objec
  • 如何从表中获取数据?

    如何从 Javascript 中的表 displayTable 中名为 Limit 的列中提取数据 字符串 var table document getElementById displayTable var rowCount table
  • Rails ActiveRecord 如何在没有多个查询的情况下链接“where”子句?

    我是一名 PHP 开发人员 正在学习 Ruby on Rails 的强大功能 我很喜欢 ActiveRecord 并且注意到一些非常有趣的事情 这就是 ActiveRecord 方法如何检测方法链的末尾以执行查询 person Person