Раньше я создавал только ассоциацию has_and_belongs_to_many, и она отличается от has_many: through. Нужна ли мне таблица соединений для has_many: через ассоциацию? Как работает настоящая ассоциация? Нужен ли мне индекс? Я не могу найти отличный учебник по этому поводу, есть предложения?
Нужна ли мне таблица соединений для ассоциации has_many: through?
Ответы (2)
Да, вам нужен соединительный стол. Здесь показано, как: http://railscasts.com/episodes/47-two-many-to-many
Это также может быть полезно; has_many: через вопросы
Кстати, если вам нужно выполнить поиск с условием, это поможет: Имеет много сквозных ассоциаций с условиями
Также отличный пример с кодом редактирования вложенных атрибутов объединенной таблицы в Вложенная форма Rails с has_many: through, как редактировать атрибуты модели соединения?.
Все это то, чем вы, возможно, захотите заняться :)
Индекс не является обязательным и также зависит от db. Раньше mySQL поддерживал только 1 за раз. Не уверен, что это изменилось.
generate
для модели и включите или добавьте атрибуты в миграцию, а затем rake db: migration, чтобы фактически создать модель базы данных. миграция для создания
- person Michael Durrant; 14.10.2011
Это зависит от того, как вы хотите использовать отношение has_many :through
. Есть два разных случая (названных в руководстве по отношениям
- для отношения n: m: пример в руководстве - врачи записываются на прием к пациентам.
- для отношения 1: n и дополнительного отношения 1: n: пример в руководстве: 1 документ имеет много разделов, а 1 раздел - много абзацев.
Для первого вам понадобится соединительная таблица, вам не нужен индекс. Для второго вам их не нужно.
has_many :through
, нужна вам таблица соединений или нет. Если в документе много разделов, а в каждом разделе много абзацев, вы сначала создали модели независимо, а затем добавили в модели отношения has_many
и belongs_to
. Позже вы добавите ярлык has_many :through
, чтобы получить все абзацы прямо из документа. Я бы не назвал таблицу разделов таблицей соединений, но из кода видно отношение has_many :through
.
- person mliebelt; 14.10.2011