2016-03-05 53 views
0

我正在嘗試爲酒店創建一個簡單的客人名單,並且我想聯繫2位已結婚的客人。我到處找,並沒有找到一個簡單的答案。Rails Acesstry Gem配偶

我剛安裝了祖先的寶石,但我只看到如何關聯孩子和父母 - 我錯過了什麼?我是否推翻了這種情況?

任何幫助最好的方式來設置這將不勝感激!

我目前的架構:

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 

回答

2

祖先用來表示一個樹結構,一個父子關係。 一對夫婦是不同的。根據您需要多少靈活性,您可以將partner_id屬性添加到Guest並定義belongs_to關聯。

如果您需要更復雜的東西,您可以按照Artyom的描述創建 Marriage模型/表格。或者,您可以進一步創建一個Relation模型,該模型可用於指定如何與Guest相互關聯:關係(from_id,to_id,kind)。其中kind將是一個整數(請參閱Rails枚舉)或指定關係(已婚,父母,孩子,...)的字符串。

+0

我結束了一個partner_id並用它來關聯到一個用戶。比嘗試使用寶石更容易。非常感謝! – gwalshington

0

至於我?我會用params的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' 

這樣的事情。