w jaki sposób wywoływana jest ta metoda klasy Ruby?

Na ekranie rzuconyEksportowanie pliku CSV z aplikacji szyny, Ryan Bates przedstawił następujący prosty kod.

Próbuję dowiedzieć się, w jaki sposób metoda klasy Product :: to_csv jest wywoływana w linii 5 produktu ProductController.rb, ponieważ wydaje się, że nie spełnia ona normalnych reguł Ruby.

produkt.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

Ponieważ to_csv jest metodą klasową, oczekiwałbym, że wywołanie będzie wyglądało jak Product :: to_csv ().

Zgodnie z dokumentacją, @products jest instancją ActiveRecord :: Relation. Dlaczego komunikaty wysyłane do instancji ActiveRecord :: Relation powodują wywołanie metod w obiekcie klasy Product? Aby uczynić go jeszcze dziwniejszym, zmiana nazwy na _csv na dowolną dowolną nazwę zarówno nadawcy, jak i odbiorcy, prowadzi do NoMethodError, więc może jest trochę magii na podstawie nazw, które zaczynają się od?

Czy brakuje mi czegoś oczywistego? Wszelkie wyjaśnienia byłyby bardzo mile widziane.

questionAnswers(2)

yourAnswerToTheQuestion