【问题标题】:Best practice for sharing table without inheritance无继承共享表的最佳实践
【发布时间】:2017-04-28 16:27:54
【问题描述】:

【问题讨论】:

  • 如果您愿意ActiveRecord::Inheritance,请进行代码潜水。引用众所周知的 MTV(“这就是魔法发生的地方”)
  • 如果它们不是子类型,为什么要共享同一个表?为了避免一些迁移,这听起来很复杂?
  • 我以前读过B < A,因为B 是A。如果D 不是A 的特殊类型,那么恕我直言,使用STI 将是一种反模式。鉴于 Rails 中与 STI 相关的所有魔力,与 Rails 约定作斗争要比复制一次迁移以拥有两个结构相似但名称不同的表要困难得多。
  • 是的,max / @spickermann,我同意你们的看法。感谢您的意见。

标签: ruby-on-rails ruby inheritance activerecord


【解决方案1】:

将属性移动到它自己的模型中(我不知道业务案例是什么,所以我们称之为Thing

A belongs to Thing
B belongs to Thing
C belongs to Thing
D belongs to Thing

这可以帮助您避免在 Rails 中经常导致混淆的两件事:

  • 单表继承 (STI):即一旦类型、URL 生成、表单之间存在差异,就很难有 DB 级别的约束
  • default_scope 这通常会在开发人员不知道的情况下导致令人困惑的行为

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多