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がデータベースに存在するため(Thingsは実際にはアタッチされていないと存在しませんPerson)、ジョブの呼び出し元はThing最初のものを保存することを知っている必要があります。の検証をオーバーライドしますPerson。最悪。
4)Thing.to_open_structARの詳細をDJシリアル化のためにOpenStructにダンプするメソッドを作成します。ちょっと散らかっています。そのメソッドを移行と同期させる必要があります。理想的ではありませんが、これまでで最高です。
何か案は?未保存のDJをシリアル化するつもりはありませんThing。ただ、クリーンなソリューションが必要です。