Como esse método de classe Ruby é invocado?

Em uma tela lançada emExportando CSV de um aplicativo de trilhosRyan Bates apresentou o seguinte código simples.

Eu estou tentando descobrir como o método de classe Product :: to_csv realmente é invocado na linha 5 do ProductController.rb, como ele não parece seguir as regras normais do 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

Como to_csv é um método de classe, esperaria que a chamada se parecesse com Product :: to_csv ().

Segundo a documentação, @products é uma instância do ActiveRecord :: Relation. Por que as mensagens enviadas para uma instância do ActiveRecord :: Relation causam métodos no objeto de classe Product para serem chamadas? Para torná-lo ainda mais estranho, renomear to_csv para algum nome arbitrário no remetente e no receptor leva a NoMethodError, então talvez haja alguma mágica em andamento baseada em nomes que começam com to_?

Estou faltando alguma coisa óbvia? Qualquer esclarecimento seria muito apreciado.

questionAnswers(2)

yourAnswerToTheQuestion