定义ActiveRecord方法以处理RubyonRails中的不同ActiveRecord关系

定义ActiveRecord方法以处理RubyonRails中的不同ActiveRecord关系,ruby,activerecord,ruby-on-rails-5,Ruby,Activerecord,Ruby On Rails 5,假设我们有一个 class MyModel < ActiveRecord::Base def self.stats # do something and returns a hash end end 这可能吗?我需要将ActiveRecord关系作为参数传递,或将作用域作为参数传递?是的,stats方法中的作用域将是该关系 def self.stats count end MyModel.all.stats # => 10 MyModel.w

假设我们有一个

class MyModel < ActiveRecord::Base
    def self.stats
        # do something and returns a hash
    end
end

这可能吗?我需要将
ActiveRecord关系
作为参数传递,或将作用域作为参数传递?

是的,
stats
方法中的作用域将是该关系

def self.stats
  count
end

MyModel.all.stats 
# => 10
MyModel.where("created_at > ?", 1.day.ago).stats
# => 5
这是一个很好的资源

如果您想迭代记录,可以使用
find_each
方法:

def self.stats
  find_each do |my_model|
    puts my_model.id
  end
end

我忘了提到我使用的是Rails 5.2.0@SergioTulentsevI,但是我该如何迭代这个关系呢?可以这样做吗?是的,您可以使用任何
ActiveRecord::Relation
method@Rodrigo:不过没有。您可以执行
MyModel.all.map(…)
,但不能将
map
放入
stats
(或者,至少它在我的机器上不起作用)。这种神奇的代理方法不是最容易掌握的。@Rodrigo,当我尝试使用
each
时,给了我以下错误
MyModel的未定义方法'each'(调用'MyModel.connection'建立连接):Class
使用
查找每个
。如果您使用
每一个
,当您处于非作用域时,它将不起作用
def self.stats
  find_each do |my_model|
    puts my_model.id
  end
end