Rails祖先宝石配偶

时间:2016-03-05 17:48:30

标签: ruby-on-rails ruby rubygems

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

我刚安装了Ancestry宝石,但我只看到如何联系孩子和父母 - 我错过了什么?我是否过度思考这种情况?

非常感谢任何帮助以最好的方式设置它!

我目前的架构:

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 个答案:

答案 0 :(得分:2)

Ancestry用于表示树结构,父子关系。 一对夫妻有所不同。根据您需要的灵活性,您只需向partner_id添加Guest属性并定义belongs_to关联。

如果您需要更复杂的东西,可以按照Artyom的描述创建 Marriage模型/表格。或者您可以更进一步创建一个Relation模型,该模型可用于指定Guest彼此之间的关系:Relation(from_id,to_id,kind)。其中kind是一个整数(参见Rails枚举)或指定关系的字符串(已婚,父,子,......)。

答案 1 :(得分:0)

至于我?我会用params guest_id和guest2_id创建另一个模型(例如Marriage)。 例如: 在访客模型

function choseBig (myArray) {

    var result = [], firstBig, secondBig;

    // select the biggest value
    firstBig = Math.max.apply(Math, myArray);

    // find its index
    var index = myArray.indexOf(firstBig);

    // remove the biggest value from the original array 
    myArray.splice((index), 1);


    secondBig = Math.max.apply(Math, myArray);

    // push the results into a new array
    result.push(firstBig, secondBig);

    return result;
}

console.log(choseBig ([1,2,3,4,5,9]));

在Merriage模型中

  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

像这样。