Rails问题:有STI的belongs_to - 我该如何正确地做到这一点?

Mar*_*tto 12 ruby-on-rails has-many single-table-inheritance sti ruby-on-rails-3

我一直在玩STI和belongs_to/has_many关系,我有点困惑.

基于类似于以下的模型配置,我有几个问题:

class Parental < ActiveRecord::Base
end

class Mother < Parental
    has_many :babies
end

class Father < Parental
    has_many :babies
end

class Baby < ActiveRecord::Base
    belongs_to :?????? 
end
Run Code Online (Sandbox Code Playgroud)
  1. 应该Baby属于什么?
  2. 在迁移方面,我应该在babies桌面上为外键命名/添加什么?
  3. 我很难研究这个问题,有没有明确的来源解释这一点?API文档似乎没有击中它或我错过了它(这是完全可能的).

我首先想到的是添加parental_idbabies具有类似的方法沿着Baby#owner该执行以下操作:

  • 命中self.parental
  • 确定父母的类型
  • 返回正确的父母类型(可能是母亲,可能是父亲)

谢谢!

jef*_*unt 7

Baby属于两个MotherFather

belongs_to :mother
belongs_to :father
Run Code Online (Sandbox Code Playgroud)

您可以拥有多个外键.然后BabyDB表有两个字段,mother_idfather_id

协会的权威指南在这里:http://guides.rubyonrails.org/association_basics.html

创建Baby类的迁移看起来像这样:

class CreateBabies < ActiveRecord::Migration
  def self.up
    create_table :babies do |t|
      t.integer :father_id
      t.integer :mother_id
    end
  end

  def self.down
    drop_table :babies
  end
end
Run Code Online (Sandbox Code Playgroud)

这给你的东西: baby.motherbaby.father.你不能拥有一个,parental_id因为外键只能指向另一个记录,这意味着婴儿只有一个父母(当他们真的有两个时).

似乎,在这种情况下,你只是误解了这种关系,就是这样.你走在正确的轨道上.

  • 耶稣不至少有两个父母吗?玛丽,还有上帝?你的模型并没有区分生父(上帝?)与步/采父(约瑟夫).如果你还需要处理步骤/收养的父母,那么你必须将它改为`has_and_belongs_to_many:mothers`和`has_and_belongs_to_many:父亲'的关系. (2认同)