gpt4 book ai didi

ruby-on-rails - 这个 Ruby 类方法是如何被调用的?

转载 作者:行者123 更新时间:2023-12-04 03:06:25 26 4
gpt4 key购买 nike

Exporting CSV from a rails app 上转换的屏幕中, Ryan Bates 展示了以下简单代码。

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

product.rb

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

products_controller.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 所做的事情之一。任何类方法自动变为可用的“集合”方法,这意味着它们可用于关系对象。范围和类方法可以这样互换。

关于ruby-on-rails - 这个 Ruby 类方法是如何被调用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11587711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com