Неявные таблицы в Ruby on Rails - PullRequest
0 голосов
/ 30 мая 2009

Я только учусь программировать на Ruby on Rails, и я действительно впечатлен тем, как много работы для вас делает среда Ruby on Rails. У меня есть следующие два класса:

Object
--------
object_id
description

ObjectGroup
--------
group_id 
description

Идея состоит в том, что у меня есть несколько объектов, и я бы хотел, чтобы пользователи могли определять группы объектов. И строки Object, и строки ObjectGroup имеют свои собственные идентификаторы и связанные данные, что очень интуитивно понятно на основе опубликованных документов в Интернете. Мой вопрос - как мне хранить информацию об объектах, которые составляют ObjectGroup, и наилучшим образом использовать среду Ruby on Rails? Очевидный способ сделать это в SQL - использовать третью таблицу, в которой хранятся записи следующего вида:

ObjectGroupEntry
--------
object_id
group_id

Каждая запись в таблице ObjectGroupEntry представляет объект, который является частью ObjectGroup. Я обязан создать эту таблицу вручную и научить классы, которые взаимодействуют с объектами и группами объектов, как с ней работать? Или в Ruby on Rails есть какое-то волшебство, которое я пока не нашел?

Я мог бы сделать это сам с тем, что я знаю, но я все еще изучаю Ruby on Rails, и я хотел бы научиться Правильному Пути (TM), чтобы сделать это.

Ответы [ 2 ]

3 голосов
/ 30 мая 2009

С Rails это немного и то и другое. Вы создаете таблицу, используя миграцию (или другой метод) с обычным соглашением об именах, а затем в моделях для Object и ObjectGroup вы должны поместить строку:

==Object==
has_and_belongs_to_many :object_groups

==ObjectGroup==
has_and_belongs_to_many :objects

Пока у вас нет дополнительной информации в таблице ObjectObjectGroup, тогда это все, что вам нужно. В противном случае вам понадобится новая модель, но вы можете получить такое же поведение, как это:

==Object==
has_many :object_object_groups
has_many :object_groups, :through => :object_object_groups

==ObjectObjectGroup==
belongs_to :object
belongs_to :object_group

==ObjectGroup==
has_many :object_object_groups
has_many :objects, :through => :object_object_groups

указывает отношение has_many с атрибутом: through, чтобы получить отношение многие ко многим, и разрешает доступ к другой информации об этом отношении.

1 голос
/ 30 мая 2009

Я думаю, что вы найдете это

has_many :object_object_groups
has_many :objects, :though => :through => :object_object_groups

, а не то, что заявил workmad3. Вся остальная предоставленная информация верна, это всего лишь синтаксическая ошибка.

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