Определите метод ActiveRecord для работы с различными отношениями ActiveRecord в Ruby on Rails - PullRequest
0 голосов
/ 27 июня 2018

Допустим, у нас есть метод в

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

Метод должен перебирать записи и, возможно, вызывать each.

Я хочу использовать этот метод с scopes, where, all и т. Д. Например:

MyModel.all.stats
#=> one hash
MyModel.where("created_at > ?", 1.day.ago).stats
#=> another hash
MyModel.funny.stats
#=> funny hash
...

Возможно ли это? Мне нужно передать ActiveRecord Relation в качестве параметра или области видимости в качестве параметров?

1 Ответ

0 голосов
/ 27 июня 2018

Да, область применения метода 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...