【问题标题】:Multi Table Inheritance with rails 3多表继承与 rails 3
【发布时间】:2011-02-16 22:14:27
【问题描述】:

关于 Rails 3 中的多表继承,是否有标准或最佳实践?到目前为止,我能找到的最好的文章是:

http://mediumexposure.com/multiple-table-inheritance-active-record/

但即便如此,也需要进行一些更改(例如,将需求移动到初始化程序而不是旧的 /config/environment.rb)

有更好的资源/标准吗?

【问题讨论】:

    标签: ruby-on-rails multiple-tables sti


    【解决方案1】:

    有关进行多表继承的简单方法,请查看“acts_as_relation”插件https://github.com/hzamani/acts_as_relation

    【讨论】:

    • API 美观易读,使用简单。几年前,在 Rails 出现任何好的 MTI 解决方案之前,这会为我节省 LOT 的问题。
    • 不错的插件。然而值得一提的是,它似乎并没有在数据层保持参照完整性。如果这对您很重要,Dan Chak 在Enterprise Rails的(免费)在线版本中很好地介绍了这一点
    • @Hassan,但是对于带有设计 gem 的 acts_as-relation gem,我应该在哪里放置我的注册表单?我的Clients 设计模型是可操作的,其他3 个模型acts_as :clients。如何处理我的注册表单?作为客户的其他 3 个模型有不同的内容可供选择。
    【解决方案2】:

    我最近创建了一个很有前途的 gem,用于在 Rails 中实现多表继承和类继承。我花了几天时间对其进行快速开发、修复、评论和文档,并将其重新发布为 CITIER(Rails 的类继承和表继承嵌入)。

    考虑看看:https://github.com/PeterHamilton/citier

    它实际上借鉴了你提到的那篇文章中的一些概念。

    【讨论】:

    • 只是在您的页面上查看您的示例,当您调用 d.save 来保存您的 Dictionary 对象时,它看起来正在调用 3 个更新,其中前 2 个被覆盖:1. @987654323 @ 2. citier -> SQL : UPDATE products SET type = 'Book' WHERE id = 1 3. citier -> SQL : UPDATE products SET type = 'Dictionary' WHERE id = 1 这是准确的吗?还是忽略前 2 个,只调用最后一个?
    【解决方案3】:

    我参加的墨尔本 Ruby 小组中有一个人写了几篇关于 rails 中的表继承的博客,并且 cmets 也非常有帮助。它不是专门针对 Rails 3,但其中肯定有一些不错的指针。

    http://rhnh.net/2010/08/15/class-table-inheritance-and-eager-loading

    http://rhnh.net/2010/07/02/3-reasons-why-you-should-not-use-single-table-inheritance

    阅读愉快

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多