定义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