我有一張表,其中需要在運行時通過外部服務的附加數據更新數據。我想要做的是這樣的:如何在返回之前修改Rails ActiveRecord查詢結果?
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
它還給ALL MyModels,不只是由some_custom_scope和some_other_scope限定的那些。
希望我想要做的事情是有道理的。任何人都知道如何去做,或者我想把一個方形的釘子放在一個圓孔裏?
這真的幫助。謝謝。我有點擔心「class << the_scope」位會覆蓋所有範圍的「to_a」。但它似乎並沒有。這很棒。 – kierantop 2014-10-28 12:30:38