首页 > 解决方案 > Rails 单表继承,在不同模型中引用不同列

问题描述

如何在使用单表继承从公共类继承的 2 个模型中拥有 2 个不同的引用列?

我找到了这个单表继承 (STI) 列关联的答案,但是就像 10 年前一样,现在在 Rails 中有更好的解决方案吗?

问题示例:我想要考虑类(动物具有识别狮子/人类的类型)

class Animal < ApplicationRecord
    belongs_to :classA
end

class Lion < Animal
    belongs_to :two_legged
end

class Human < Animal
    belongs_to :four_legged
end

所以最后我希望 Lion 属于classAand two_legged; 人类属于classAfour_legged

除了在 Animal 中定义所有三个 belongs_to 并在 Lion & Human 中将不相关的列设为 nil 之外,还有其他更好的解决方案吗?

标签: ruby-on-railsruby-on-rails-5single-table-inheritance

解决方案


按照官方文档

class Animal < ApplicationRecord
    belongs_to :classA
    has_many :lions
    has_many :humans
end

class Lion < ApplicationRecord
    belongs_to :animal
end

class Human < ApplicationRecord
    belongs_to :animal
end

推荐阅读