Rails - 序列化另一个activerecord模型

时间:2010-10-26 18:52:54

标签: ruby-on-rails activerecord

我希望将不完整/临时模型序列化为另一个模型的属性,例如:

class User < ActiveRecord::Base
  serialize :pending_post
end

在pending_post中分配了一个activerecord模型:

...
user.pending_post = Post.new(:title => "Whatever", :message => "whatever")
user.save

但是,不是为新的Post模型保存yaml,而是pending_post属性为nil(在DB中和重新加载时)。序列化适用于其他对象,哈希,数组等,但在这种情况下出现零。这是Rails 2.3.9,但我用3.0.1进行了快速测试并看到了相同的结果。我在几年前找到了这个问题的描述:http://www.ruby-forum.com/topic/101858

我知道我可以手动序列化/反序列化对象(工作正常)或序列化post.attributes,但我很好奇是否有人知道为什么这样做呢?似乎在分配给user.pending_post之前保存了新帖子,然后只将ID保存为user.pending_post属性。我很确定这是故意的,而不是一个bug,但我完全不理解这个推理。序列化active_record模型的形式不好吗?

1 个答案:

答案 0 :(得分:2)

我认为您需要序列化/保存属性,而不是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

我希望这有帮助!