как вызывается этот метод класса Ruby?

В скриншоте наЭкспорт CSV из приложения railsРайан Бейтс представил следующий простой код.

Я пытаюсь выяснить, как метод класса Product :: to_csv фактически вызывается в строке 5 ProductController.rb, так как он, похоже, не следует нормальным правилам 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_?

Я что-то упускаю из виду? Любое разъяснение будет с благодарностью.

Ответы на вопрос(2)

Ваш ответ на вопрос