У меня есть таблица с данными, которые должны обновляться во время выполнения дополнительными данными из внешней службы. Я хотел бы сделать что-то вроде этого:
MyModel.some_custom_scope.some_other_scope.enhance_with_external_data.each do |object|
puts object.some_attribute_from_external_data_source
end
Даже если я не могу использовать этот точный синтаксис, я бы хотел, чтобы конечный результат соблюдал любые области, которые я могу использовать. Я пробовал это:
def self.enhance_with_external_data
external_data = get_external_data
Enumerator.new do |yielder|
# mimick some stuff I saw in ActiveRecord and don't quite understand:
relation.to_a.each do |obj|
update_obj_with_external_data(obj)
yielder.yield(obj)
end
end
end
Это в основном работает, за исключением того, что оно не учитывает предыдущие примененные области, поэтому если я сделаю это:
MyModel.some_custom_scope.some_other_scope.enhance_with_external_data
Он возвращает ВСЕ МОДЕЛИ, а не только те, которые ограничены some_custom_scope и some_other_scope.
Надеюсь, то, что я пытаюсь сделать, имеет смысл. Кто-нибудь знает, как это сделать, или я пытаюсь поставить квадратный колышек в круглое отверстие?