У меня есть массив объектов, назовем его Indicator
. Я хочу запустить def self.subjects
в этом массиве методы класса индикаторов (различных видов , областей действия и т. Д.). Единственный известный мне способ запустить методы класса для группы объектов - сделать их ActiveRecord :: Relation. Поэтому я прибегаю к добавлению to_indicators
метода в Array
.
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
). Если вам нужно превратить массив в отношение, вы где-то пошли не так ...