我希望将不完整/临时模型序列化为另一个模型的属性,例如:
class User < ActiveRecord::Base serialize :pending_post end
... user.pending_post = Post.new(:title => "Whatever", :message => "whatever") user.save
但是,pending_Post属性不是为新的Post模型保存yaml,而是nil(在DB和重新加载时)。序列化对其他对象、散列、数组等非常有用,但在本例中为nil。这是Rails2.3.9,但是我用3.0.1做了一个快速测试,看到了相同的结果。我发现了多年前关于这个问题的描述: http://www.ruby-forum.com/topic/101858 .
我知道我可以手动序列化/反序列化对象(工作正常)或仅序列化post.attributes,但我很好奇是否有人知道为什么这样做?如果新文章在分配给user.pending_post之前被保存,那么只有ID被保存为user.pending_post属性。我很确定这是故意的,不是个错误,但我不太明白其中的道理。序列化一个活动的记录模型是不是很糟糕?
我认为您需要序列化/保存 属性
user.pending_post = {:title => 'Whatever', :message => 'whatever'} user.save
然后你可以把它变成一个真正的帖子:
user.posts.create user.pending_post
我可能会更进一步(就像我经常做的那样)使用用户方法:
def save_post self.posts.create self.pending_post end