代码之家  ›  专栏  ›  技术社区  ›  njorden

Rails-序列化另一个activerecord模型

  •  1
  • njorden  · 技术社区  · 14 年前

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

    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属性。我很确定这是故意的,不是个错误,但我不太明白其中的道理。序列化一个活动的记录模型是不是很糟糕?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Jaime Bellmyer    14 年前

    我认为您需要序列化/保存 属性

    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