假设我们有一个方法

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

该方法需要遍历记录,并可能调用each
我想将此方法与scopeswhereall等一起使用,如下所示:
MyModel.all.stats
#=> one hash
MyModel.where("created_at > ?", 1.day.ago).stats
#=> another hash
MyModel.funny.stats
#=> funny hash
...

这可能吗?我需要将ActiveRecord Relation作为参数传递,还是将作用域作为参数传递?

最佳答案

是的,stats方法中的范围是

def self.stats
  count
end

MyModel.all.stats
# => 10
MyModel.where("created_at > ?", 1.day.ago).stats
# => 5

这里有一个很好的资源http://blog.plataformatec.com.br/2013/02/active-record-scopes-vs-class-methods/
如果要遍历记录,可以使用find_each方法:
def self.stats
  find_each do |my_model|
    puts my_model.id
  end
end

关于ruby - 定义ActiveRecord方法以在Ruby on Rails中使用不同的ActiveRecord关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51059716/

10-13 04:51