获取接收类方法调用的ActiveRecord_Relation

时间:2018-02-28 16:01:24

标签: ruby-on-rails ruby-on-rails-4 activerecord ruby-on-rails-5

有:

class Foo < ApplicationRecord
  def self.to_csv
    # irrelevant
  end
end

Rails允许我这样做:

Foo.all.to_csv

但是我如何访问在to_csv内接收方法调用的集合? (在这种情况下为all

1 个答案:

答案 0 :(得分:2)

这可能看似违反直觉,但您可以使用#all

例如:

class Foo < ActiveRecord::Base
  def self.to_csv
    all.map(&:convert_to_csv)
  end
end

这不仅适用于Foo.all.to_csv,也适用于Foo.where(...).to_csv

如果您查看#allActiveRecord的来源:

def all
  if current_scope
    current_scope.clone
  else
    default_scoped
  end
end

这意味着如果您使用wherelimit定义了范围,则会尊重它。或者,如果您正在抓取所有记录,则只会使用default_scoped