2016-03-05 56 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' 

这样的事情。