Rails 祖先 Gem 配偶

Rails Ancestry Gem Spouse

我正在尝试为酒店创建一个简单的客人列表,我想关联 2 位已婚客人。我到处寻找,但没有找到直接的答案。

我刚刚安装了 Ancestry gem,但我只看到如何关联 children 和 parents - 我是不是遗漏了什么?我是不是想多了?

如能以最佳方式提供帮助,我们将不胜感激!

我当前的架构:

ActiveRecord::Schema.define(version: 20160305173232) do

  create_table "guests", force: :cascade do |t|
    t.string   "first_name"
    t.string   "last_name"
    t.string   "phone"
    t.string   "email"
    t.date     "birthday"
    t.text     "notes"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string   "ancestry"
  end

  add_index "guests", ["ancestry"], name: "index_guests_on_ancestry"

end

至于我吗?我会用参数 guest_id 和 guest2_id 创建另一个模型(例如 Marriage)。 例如: 在来宾模型中

  before_save :set_merriages_reverse

  has_and_belongs_to_many :marriages,
                          :class_name => 'Merriage',
                          :join_table => 'merriages',
                          :foreign_key => 'guest_id',
                          :association_foreign_key => 'guest2_id'

  has_and_belongs_to_many :set_merriages_reverse,
                          :class_name => 'Merriage',
                          :join_table => 'merriages',
                          :foreign_key => 'guest2_id',
                          :association_foreign_key => 'guest_id'
  ...

  private
  def set_merriages_reverse
    self.set_merriages_reverse_ids = self.merriage_ids
  end

在 Merriage 模型中

 belongs_to :guest, :class_name => 'Guest', :foreign_key => 'guest_id'
 belongs_to :guest2, :class_name => 'Guest', :foreign_key => 'guest2_id'

像这样。

Ancestry用来表示一个树结构,一个parent-child关系。 一对夫妇是不同的。根据您需要的灵活性,您可以将 partner_id 属性添加到 Guest 并定义 belongs_to 关联。

如果您需要更复杂的东西,您可以按照 Artyom 的描述创建 Marriage model/table。或者您可以更进一步,创建一个 Relation 模型,该模型可用于指定 Guest 如何相互关联:Relation(from_id, to_id, kind ).其中 kind 将是一个整数(参见 Rails 枚举)或指定关系的字符串(已婚,parent,child,...)。