Thing
保存されていないActiveRecordオブジェクトを保存されたオブジェクトの配列に適用しようとしていますPerson
。
person has_many :things
ただし、Delayed Jobは、保存されていないActiveRecordモデルで動作することを目的としたものではありません。彼らが私に言ったので私は知っています:
DJは、保存されていないActiveRecordモデルで動作することを意図していません。
...エラーを回避できません:
{ActiveRecord::RecordNotFound, class: Thing , primary key:
私はそれを回避するためにいくつかの戦略を蹴っています:
1)ここからself.yaml_newをオーバーライドします。ひどい考えのように聞こえます。
2)オーバーライドThing.find
して、見つからないオブジェクトから回復し、保存されていないオブジェクトをハイドレイトします。それは#1よりもさらに悪い考えです
3)Thing
最初にデータベースに保存します。ジョブをクリーンアップする必要がある孤児Thing
がデータベースに存在するため(Thing
sは実際にはアタッチされていないと存在しませんPerson
)、ジョブの呼び出し元はThing
最初のものを保存することを知っている必要があります。の検証をオーバーライドしますPerson
。最悪。
4)Thing.to_open_struct
ARの詳細をDJシリアル化のためにOpenStructにダンプするメソッドを作成します。ちょっと散らかっています。そのメソッドを移行と同期させる必要があります。理想的ではありませんが、これまでで最高です。
何か案は?未保存のDJをシリアル化するつもりはありませんThing
。ただ、クリーンなソリューションが必要です。