【问题标题】:Adding an associated Table to an Existing Table (Book > Revision)将关联表添加到现有表(书籍 > 修订版)
【发布时间】:2010-09-11 17:28:44
【问题描述】:

我有以下型号:

class Instance < ActiveRecord::Base 
 has_many :users 
 has_many :books 
end 
class User < ActiveRecord::Base 
 belongs_to :instance 
end 
class Book < ActiveRecord::Base 
 belongs_to :instance 
end 

我现在想添加一个 BookRevision 表,其中包含以下列 (id, user_id, version # (auto increment), diff (old book copy), 时间戳) 逻辑:

  • 创建图书时,会生成一条记录 添加到 BookRevision 表中,所以 我们知道是谁创造了这本书 第一名
  • 更新图书时,会添加一条带有 user_id 的记录(可以是 不同的用户)和新版本

    和旧书文本,用作存档。

鉴于我的导轨中有实例、用户、书籍表实现 添加,这些是使上述内容变为现实的正确步骤吗? - 为 BookRevision 表添加迁移.... rails 生成迁移 AddTableBookRevision user_id:integer 版本:整数差异:文本 - 然后更新模型如下:

class Instance < ActiveRecord::Base 
 has_many :users 
 has_many :books 
end 
class User < ActiveRecord::Base 
 belongs_to :instance 
end 
class Book < ActiveRecord::Base 
 belongs_to :instance 
 has_many :BookRevisions 
end 
class BookRevision  < ActiveRecord::Base 
 belongs_to :Book 
end 

然后在我的控制器中,当添加一本新书?现在我有:

@book = Book.create(params[:book].merge(:instance_id => 
current_user.instance_id)) 

如何更新它以说明 BookRevision 关联? 感谢您帮助我!

【问题讨论】:

    标签: ruby-on-rails activerecord ruby-on-rails-3


    【解决方案1】:

    您可能想查看acts_as_versioned 之类的内容,而不是自己动手。这以您在此处描述的方式工作,其中修改保存到单独但相关的表中。

    请记住,从那时起,您必须同时将迁移应用到您的 Book 和 BookRevision 表。它们必须与架构兼容才能进行修订。

    我已经构建了一个此类版本跟踪系统,该系统使用序列化模型来避免维护迁移,因为其目的是保留模型的确切状态,而不管未来通过迁移进行的修改如何。这样做的缺点是无法回滚到任意旧版本,因为可能存在架构不匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      相关资源
      最近更新 更多