我有一个名为Product的Mongoid模型,它与自身有has_one
和belongs_to
关联,因此我可以有original
和new_version
行为。
这样做是为了在新版本获得批准之前,可以在不影响原始版本的情况下修改产品。我设法dup
原始产品,包括它的多个CarrierWave附件,以创建new_version
(这不会重新上传已存在的文件)。
当我修改新版本并上传不同的文件并批准这个新版本时,我需要将这些新文件(和其他属性)分配给原始产品。要做到这一点,我使用的代码块类似于:
# self is this context is the new product version
original_product.assign_attributes self.attributes.except(*Product.attributes_to_exclude)
original_product.save && self.destroy
在我排除的属性中,我排除了id, _id, created_at, updated_at
以及其他与复制到原始版本无关或不必要的内容。这适用于所有非CarrierWave文件属性,但不保存文件属性。我知道它存储在Mongoid文档中的所有内容都是文件名,我希望它可以像修改此文档的属性一样简单。
关于如何实现这一点的任何想法?我基本上寻找的是与dup
方法相同的行为,但在我正在解释的批准上下文中。
谢谢!