获取接收类方法调用的ActiveRecord_Relation

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取接收类方法调用的ActiveRecord_Relation相关的知识,希望对你有一定的参考价值。

有:

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

Rails允许我这样做:

Foo.all.to_csv

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

答案

这似乎与直觉相反,但你可以使用#all

例如:

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

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

如果你看看#all里面的ActiveRecord的来源:

def all
  if current_scope
    current_scope.clone
  else
    default_scoped
  end
end

这意味着如果您使用wherelimit定义了范围,它将尊重它。或者,如果你抓住所有记录,它将只使用default_scoped

以上是关于获取接收类方法调用的ActiveRecord_Relation的主要内容,如果未能解决你的问题,请参考以下文章

如何从广播接收器类调用颤振方法?

JAVA反射问题,一个方法类的参数能否通过设置成泛型或者啥来接收反射的CLASS。

怎么接收对方发送的request

JavaMail入门第四篇 接收邮件

JavaMail入门第四篇 接收邮件

java-反射