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.