1
オブジェクトとすべての関連オブジェクトをロードするにはどうすればよいですか?私は怠惰な読み込み(私はそれが怠惰な読み込みだと思うので)私に問題を引き起こしているので頼んでいる。 これは遅いことですが、このスクリプトは10分ごとに1回しか実行されないので問題ありません。ルビデータマッパー、ロードとオブジェクト、および関連するオブジェクト
Model_Object.all(load_all_now: true)
オブジェクトとすべての関連オブジェクトをロードするにはどうすればよいですか?私は怠惰な読み込み(私はそれが怠惰な読み込みだと思うので)私に問題を引き起こしているので頼んでいる。 これは遅いことですが、このスクリプトは10分ごとに1回しか実行されないので問題ありません。ルビデータマッパー、ロードとオブジェクト、および関連するオブジェクト
Model_Object.all(load_all_now: true)
残念ながら、それを行うための良い方法はありません。
のようなものがあります。
objects = ModelObject.all.map { |o| ModelObject.get(o.id) }
もう少し複雑な、あなたがこのような方法でDataMapper::Resource
をオーバーロードできます。最も簡単な解決策は、実際のようなもので、一度にすべての属性をロードするよりもさらに遅いのは勿論である個々のレコードを照会することです。
def from_sql(sql, *bind_values)
self.repository.adapter.select(sql, *bind_values).map(&:as_json).map do |h|
if h.is_a?(Hash)
self.new(h)
else
self.new(id: h)
end.tap do |record|
record.persistence_state = DataMapper::Resource::PersistenceState::Clean.new(record)
end
end
end
してから、このような何かを渡す:
properties = ModelObject.properties.map(&:field)
objects = ModelObject.from_sql("SELECT #{properties.join(", ")} FROM table_name")
なぜ負荷のすべてのオブジェクトを強制する方法はありませんか? – Thermatix
私はあなたにその答えを与えることができました。 DataMapperは、何年も前から維持されていなかった古いプロジェクトです。 ActiveRecordは飛躍的に進歩しており、開発者にとっては先進的ですが、私たちの一部は依然としてDMの使用に拘束されています。私の答えであなたが与えた方法は、私がDMの欠点を取り除くために取り組むアプリケーションに追加されましたが、常により多くのことがあります。 – Eugene
次回はアクティブなレコードを統合するだけでいいと思います。 – Thermatix