我正在尝试将未保存的 ActiveRecord 对象应用于已保存对象Thing
的数组Person
。
person has_many :things
但延迟作业不适用于未保存的 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 详细信息转储到 OpenStruct 以进行 DJ 序列化的方法。有点乱 需要使该方法与任何迁移保持同步。不理想,但这是我迄今为止最好的。
有任何想法吗?我没有设置 DJ 序列化未保存的Thing
我只是想要一个干净的解决方案。