Реляционная таблица Rails с несколькими идентификаторами из одной таблицы - PullRequest
3 голосов
/ 05 июня 2010

Я знаю, что если я назову столбец в таблице "othertablename_id", рельсы узнают, как использовать этот столбец для принадлежащего или другого отношения. Если я хочу иметь несколько идентификаторов из одной и той же таблицы, очевидно, что это не сработает, потому что у меня будут повторяющиеся имена столбцов. Каков наилучший способ построить таблицу, которая связывает две строки из одной таблицы? Как и в Таблице назначений, которая касается ровно двух пользователей.

Ответы [ 2 ]

6 голосов
/ 05 июня 2010

Ах, я понял

belongs_to :user_1, :class_name => "User"
belongs_to :user_2, :class_name => "User"

будет использовать столбцы user_1_id и user_2_id соответственно. Конечно, столбцы должны быть названы как-то более наглядно, но это довольно просто.

0 голосов
/ 05 июня 2010

Модель как:

Appointment 
=================
source_user_id
object_user_id

поможет?

РЕДАКТИРОВАТЬ Читая библию rails на странице 361, я извлек это:

Отношения многие ко многим

... Товар может принадлежать многим категории, и каждая категория может содержат несколько продуктов. Это пример многих ко многим отношения. Это как если бы каждая сторона отношения содержат коллекцию предметов на другой стороне.

альтернативный текст http://img180.imageshack.us/img180/4004/dibujolfa.png

В Rails мы выражаем это, добавляя has_and_belongs_to_many объявление в обе модели. С этого момента, мы будем сокращать это заявление до "Habtm." Многие ко многим ассоциациям симметричный - обе соединенные таблицы объявить свою связь с каждым другие используют «habtm».

В базе данных многие ко многим ассоциации реализуются с использованием таблица промежуточных соединений. Это содержит пары внешних ключей, связывающие два целевые таблицы. Активная запись предполагает что это имя таблицы присоединения является объединение двух целевых таблиц имена в алфавитном порядке. В нашем Например, мы присоединились к столу категории к столу продуктов, так Active Record будет искать объединение таблица с именем category_products.

Итак, я думаю, что все, что вам нужно сделать, это использовать объявление has_and_belongs_to_many .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...