首页 文章

Rails - 序列化另一个activerecord模型

提问于
浏览
1

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

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 回答

  • 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
    

    我希望这有帮助!

相关问题