【发布时间】:2013-03-23 09:04:39
【问题描述】:
我正在尝试将未保存的 ActiveRecord 对象 Thing 应用于已保存对象数组 Person。
person has_many :things
但延迟作业不适用于未保存的 ActiveRecord 模型。我知道是因为他们告诉我:
DJ 不适用于未保存的 ActiveRecord 模型。
...所以我无法绕过错误:
{ActiveRecord::RecordNotFound, class: Thing , primary key:
我一直在尝试一些策略来解决它:
1) 覆盖 here 中的 self.yaml_new。听起来是个可怕的主意。
2) 覆盖 Thing.find 以从未找到的状态中恢复并仅对未保存的对象进行水合。这比 #1 更糟糕
3) 首先将Thing 保存到数据库。坏主意,因为我们将在数据库中有一个孤儿Thing,作业必须清理它(Things 真的不存在没有Person 附加),作业的调用者必须知道首先保存Thing,然后我们必须覆盖对Person 的验证检查。太可怕了。
4) 创建Thing.to_open_struct 方法,将AR 细节转储到OpenStruct 中以进行DJ 序列化。有点乱需要使该方法与任何迁移保持同步。不理想,但这是我迄今为止最好的。
有什么想法吗?我没有设置 DJ 序列化未保存的 Thing 我只想要一个干净的解决方案。
【问题讨论】:
标签: ruby-on-rails activerecord delayed-job