这个 Ruby 类方法是如何被调用的?

2024-02-17

在屏幕投射中从 Rails 应用程序导出 CSV http://railscasts.com/episodes/362-exporting-csv-and-excel,Ryan Bates 给出了以下简单的代码。

我试图弄清楚类方法 Product::to_csv 实际上是如何在 ProductController.rb 的第 5 行被调用的,因为它似乎不遵循正常的 Ruby 规则。

产品.rb

1 class Product < ActiveRecord::Base   
2   def self.to_csv(options = {})
3     ...
4   end
5 end

产品控制器.rb

1 class ProductsController < ApplicationController
2  def index
3    @products = Product.order(:name)
4    respond_to do |format|
5      format.csv { send_data @products.to_csv }
6      ...
7    end
8  end
9 end

由于 to_csv 是一个类方法,我希望调用看起来像 Product::to_csv() 。

根据文档,@products 是 ActiveRecord::Relation 的一个实例。为什么发送到 ActiveRecord::Relation 实例的消息会导致调用 Product 类对象上的方法?更奇怪的是,在发送者和接收者中将 to_csv 重命名为某个任意名称会导致 NoMethodError,所以也许有一些基于以 to_ 开头的名称的魔法正在发生?

我错过了一些明显的东西吗?任何澄清将不胜感激。


这只是 Rails 所做的事情之一。任何类方法都会自动成为“集合”方法,这意味着它们可用于关系对象。这样,作用域和类方法是可以互换的。

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

这个 Ruby 类方法是如何被调用的? 的相关文章

随机推荐

  • 如何在 Flink 中引用外部 Jar

    每个人 我尝试在所有任务管理器中以将其复制到 FLINK lib 的方式在 Flink 中引用我的公司 jar 但失败了 而且我不想打包一个胖罐子 太重而且浪费时间 我认为第一种方法也不是一个好主意 因为我必须管理整个集群中的jar 有谁知
  • 将(垂直)UIPageViewController 嵌套在另一个(水平)UIPageViewcontroller 中

    我的问题很大UIPageViewController 我想使用部分和子部分在我的应用程序中呈现内容 所以 我创建了 two 的实例UIPageViewController 水平 红色 和垂直 蓝色 早些时候我说过我创建了 两个 实例 这并不
  • 哪种方法更好地从数据库检索数据

    我对选择两种方法感到困惑 Scenario有两张桌子Table 1 and Table 2分别 Table 1包含用户的数据 例如名字 姓氏等 Table 2包含每个用户拥有的汽车及其描述 IEColor Registration No e
  • 将数据子集到 R 中第一次出现的位置

    我正在尝试对数据进行子集化 以便它只保留变量的第一次出现 我正在查看追踪工人职业生涯的面板数据 并尝试对数据进行子集化 以便它只显示直到每个人成为老板 id year name job job2 1 1990 Bon Manager 0 1
  • sql server 2008 用户“NT AUTHORITY\NETWORK SERVICE”登录失败

    我正在尝试使用 net Framework 4 将我的网站连接到 Windows Server 2003 上的 sql server 2008 r2 这是连接字符串
  • AngularJS如何使用浏览器语言检测?

    您好 我使用 http get 从数据库获取文本 如何通过浏览器检测获取文本 如何使用if子句 我不想使用translate toogle var mainCtrl function scope http sce location time
  • 广播从矩阵创建的子张量(Theano)

    我想从矩阵创建两个子张量 使用索引选择相应的行 一个子张量有几行 另一行只有一行 应该广播这些行以允许按元素添加 我的问题是 如何表明我想要允许在给定索引的子张量中的特定维度上进行广播 subtensorRight在下面的例子中 这是显示我
  • 预配对蓝牙设备

    我希望能够预先配对蓝牙设备 以避免用户在使用应用程序时感到困惑的步骤 我发现有一项专利用于预配对蓝牙设备的系统 方法和装置 http www google com patents US20070123166 我正在考虑将一组 Android
  • fork() 时文件描述符是否共享?

    假设我打开一个文件open 然后我fork 我的程序 父亲和孩子现在会共享文件描述符的相同偏移量吗 我的意思是 如果我在父亲中写入 孩子中的偏移量也会改变吗 或者偏移量在之后将是独立的fork From fork 2 The child i
  • 我的 PHP 文档中的 `$page -= 1` 是什么意思? [复制]

    这个问题在这里已经有答案了 我在正在使用的 PHP 文档中定义了以下变量 但我不确定它的含义 The PHP page 1 我不确定的部分是 这是节省打字的简写 其效果等同于 page page 1
  • CSS 网格自动流如何工作?

    我面临的问题是我不明白隐式网格是如何工作的 我阅读了文档 MDN 和更多资源 但还有一个悬而未决的问题 grid display grid grid template repeat 2 100px repeat 6 1fr grid gap
  • BERT 分词器和模型下载

    我是初学者 我正在和伯特一起工作 但出于公司网络的安全考虑 下面的代码并没有直接接收bert模型 tokenizer BertTokenizer from pretrained bert base multilingual cased do
  • 如何用递归的方式思考?

    为了理解贪婪方法和动态规划等高级算法概念 首先需要精通递归 我对递归比较陌生 每当提出问题时 首先想到的就是使用迭代的解决方案 尽管我知道递归方法的含义及其工作原理 但以递归方式思考还是非常困难 请帮助回答以下问题 1 任何迭代方法都可以用
  • 如何在 eclipse luna 中配置 lombok

    我使用 Maven 在 eclipse Luna 中配置 lombok 注解已正确添加 但未生成 getter 和 setter eclipse ini vm E Program Files Java jdk1 7 0 60 bin vma
  • 如何拆分长 GraphQL 模式

    我正在尝试创建一个架构 但是会变得太长且令人困惑 分割不同查询 突变和输入的最佳实践是什么 这样我就可以只需要它们并组织它们以使其易于阅读 我试图在网上查找信息 但没有任何明确的信息 我试图不使用阿波罗 const buildSchema
  • 对可变长度序列进行训练和预测

    传感器 同类型的 分散在我的网站上 不定期地手动向我的后端报告 在报告之间 传感器聚合事件并批量报告它们 以下数据集是批量收集的序列事件数据的集合 例如传感器 1 报告了 2 次 在第一批 2 个事件和第二批 3 个事件中 传感器 2 报告
  • 修复 file_get_contents 权限被拒绝的错误

    我有一个关于 JSON 和 PHP 的问题 因此 如果您访问此网站 作为返回 您会得到 HTML 但如果您转到响应 则响应是纯 JSON 因此我尝试获取 JSON 数据 但失败了 也许我做错了什么 但我不知道是什么 我尝试过file get
  • 使用 jmxagent 将 Spark Worker/Executor 指标导出到 Prometheus

    我已按照说明进行操作here https argus sec com monitoring spark prometheus 启用指标导出到 Prometheus for Spark 为了不仅可以从作业中导出指标 还可以从主控器和工作器中导
  • React Dev Tools 不显示组件名称或状态变量名称

    这是 Google Chrome 中新的 React 开发工具的屏幕截图 仅顶级组件名称AdminArea显示 该组件位于我的脚本的入口文件中 index jsx 还应该有 AddNewCoupon 和 ViewCoupons 组件 没有启
  • 这个 Ruby 类方法是如何被调用的?

    在屏幕投射中从 Rails 应用程序导出 CSV http railscasts com episodes 362 exporting csv and excel Ryan Bates 给出了以下简单的代码 我试图弄清楚类方法 Produc