我正在尝试为酒店创建一个简单的访客列表,我想关联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
答案 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
像这样。