2013-12-16 4 views
1

Итак, у меня есть организация STI, которая идет как это:Rails STI с HBTM отношений

class Parent 
end 

class Son < Parent 
end 

class Daughter < Parent 
end 

Но у каждого ребенка есть HBTM (has_and_belongs_to_many) связь с другой моделью. Давайте назовем его Чик и Чувак, так что это будет выглядеть следующим образом:

class Parent 
end 

class Son < Parent 

    has_and_belongs_to_many :chicks 

end 

class Daughter < Parent 

    has_and_belongs_to_many :dudes 

end 

Где я должен объявить реляционные корабли? Как на родительской модели? Нужны ли дополнительные опции? Будет ли Rails сделать столбец нулевым, когда он должен быть сам?

Я искал ответ для этого, но не смог его найти, может быть, потому, что он слишком тупой.


EDIT

Как отметил Питер Alfvin, HBTM отношения должны идти вместе с вспомогательным присоединиться к столу. Это означает, что для этой конфигурации потребуется две таблицы соединений.

Но я не нашел никакой документации о номенклатуре, которая должна использоваться в этом конкретном примере.

Джойн таблица должна включать имя таблицы базы данных «родителей» или название модели «дочки»?

Такая же проблема возникает с столбцом идентификатора, ссылающимся на ИППП, если он назван в честь таблицы базы данных или модели?

ответ

0

Для того, что я мог понять, он работает, как и каждый из подкласс STI имел свою собственную таблицу (хотя в базе данных они используются одинаково, именоваться после ее родительского). Таким образом, в таблице соединений HBTM вы должны использовать идентификатор ID и имя таблицы в «иллюзорной» дочерней таблице. Миграция выглядит примерно так:

create_table :daughters_dudes, id: false do |t| 
    t.belongs_to :daughter 
    t.belongs_to :dude 
end 
2

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

Я не знаю, что вы подразумеваете под «сделать столбец нулевым». В ссылочных таблицах нет столбца для отношения HABTM. Ассоциация HABTM принимает отдельную таблицу соединений для каждой пары моделей HABTM, и записи создаются только в этой таблице, когда устанавливается связь между экземплярами связанных моделей.

См. http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association для описания таблицы соединений.

+0

О, мой, ты прав насчет таблицы соединений, моя ошибка. Не могли бы вы поделиться некоторыми знаниями о том, как это должно выглядеть на уровне базы данных? Я добавлю это к вопросу –

Смежные вопросы