У меня есть массив объектов, назовем его Indicator
. Я хочу запустить методы класса индикатора (те из класса , области действия и т. Д.) В этом массиве. Единственный способ, которым я знаю, запускать методы класса в группе объектов, - это быть ActiveRecord :: Relation. Поэтому я в конечном итоге прибегает к добавлению метода to_indicators
к Array
.Преобразование массива объектов в ActiveRecord :: Relation
def to_indicators
# TODO: Make this less terrible.
Indicator.where id: self.pluck(:id)
end
Время от времени я цепляю несколько из этих областей, чтобы отфильтровать результаты в рамках методов класса. Поэтому, хотя я вызываю метод в ActiveRecord :: Relation, я не знаю, как получить доступ к этому объекту. Я могу добраться до содержимого только через all
. Но all
- это массив. Поэтому мне нужно преобразовать этот массив в ActiveRecord :: Relation. Например, это часть одного из методов:
all.to_indicators.applicable_for_bank(id).each do |indicator|
total += indicator.residual_risk_for(id)
indicator_count += 1 if indicator.completed_by?(id)
end
Я предполагаю, что это конденсируется до двух вопросов.
- Как преобразовать массив объектов в ActiveRecord :: Relation? Предпочтительно, не делая
where
каждый раз. - При запуске метода типа
def self.subjects
в ActiveRecord :: Relation, как мне получить доступ к этому объекту ActiveRecord :: Relation?
Спасибо. Если мне нужно что-то разъяснить, дайте мне знать.
Если ваша единственная причина для пытаться преобразовать этот массив обратно в отношения, потому что вы получили его через '.all', просто используйте' .scoped' как ответ Эндрю Маршалл указывает (Хотя в рельсах 4, он будет работать с ' .all'). Если вам нужно превратить массив в отношение, которое вы ошиблись где-то ... – nzifnab