2015-07-12 1 views
1

Скажем, у меня есть персональная модель, и у человека может быть несколько детей, но также есть несколько родителей.Как создать миграцию таблицы для Foo и принадлежит многим Foos?

Создание таблицы объединения с rails generate migration CreateJoinTablePersonPerson person person, дал бы мне это:

class CreateJoinTablePersonPerson < ActiveRecord::Migration 
    def change 
    create_join_table :people, :people do |t| 
     # t.index [:person_id, :person_id] 
     # t.index [:person_id, :person_id] 
    end 
    end 
end 

Запуск выше миграции, очевидно, приводит к: CREATE TABLE "people_people" ("person_id" integer NOT NULL);.

Как создать миграцию таблицы для таблицы, которая имеет и принадлежит многим из них? Должен ли я использовать habtm, или я должен использовать какую-то «конструкцию с несколькими»?

ответ

1

Вы хотите общаться со многими по многим отношениям.

Пожалуйста, создайте отдельную модель: parent_child, в которой у вас есть два внешних ключа.

1) parent_id

2) child_id

Таким образом, для каждого отношения, например: для новой записи для родителей, child_id является self.id в то время как parent_id имеет родителя и ребенка отношения, parent_id: самостоятельно. id, а child_id - дочернего.

Вы должны добавить миграцию.

rails g model parent_child 

это приведет к миграции, добавит к нему столбец parent_id и child_id.

class CreateTableParentChildren < ActiveRecord::Migration 
     def change 
      create_table :parent_children do |t| 
      t.integer :parent_id 
      t.integer :child_id 
      end 
     #add indexes on both 
     end 
    end 

сейчас в материнском классе. вы должны добавить что-то вроде этого.

class Person < ActiveRecord::Base 

    has_many :children, class_name: "ParentChild", foreign_key: "parent_id" 
    has_many :parents, class_name: "ParentChild", foreign_key: "child_id" 
end 

Я надеюсь, что эта идея поможет вам реализовать то, что вы хотите.