Отображение устаревших столбцов базы данных в проекте rails

0

Мы создаем приложение rails для уже существующей базы данных. Нам нужно сопоставить несколько таблиц базы данных.

Предположим, что у нас есть три таблицы: event, events_groups и event_to_groups.
Есть некоторые события, есть несколько групп, и каждое событие может быть назначено одной или нескольким группам.

Как смоделировать это отношение в рельсах?

например:

Существующие таблицы:

event
    ID      name
    --------------------
    3       dinner
    4       sport
    5       anniversary
    6       birthday

event_groups
    ID      name
    --------------------
    1       work
    2       friends
    3       family

event_to_groups
    event_id    event_groups
    --------------------
    3           2
    3           3
    4           1
    4           2
    4           3
    5           3
    6           2
class Events < ActiveRecord::Base
  set_table_name 'events'
end
class Groups < ActiveRecord::Base
  set_table_name 'groups'
end
class EventToGroups < ActiveRecord::Base
  set_table_name 'event_to_groups'
end

Как получить имена групп, принадлежащие событию, из модели событий? Благодарю.

Теги:
activerecord
models

1 ответ

1
Лучший ответ

Несколько вещей - прежде всего, модель ActiveRecord должна быть единственной, а не множественной. Кроме того, я полагаю, вы имели в виду, что таблица для модели группы - это "event_groups", а не "группы"?

Попробуйте следующее:

class Event < ActiveRecord::Base
  set_table_name 'events'
  has_many :event_to_groups
  has_many :groups, :through => :event_to_groups
end

class Group < ActiveRecord::Base
  set_table_name 'event_groups'
  has_many :event_to_groups
  has_many :events, :through => :event_to_groups
end

class EventToGroup < ActiveRecord::Base
  set_table_name 'event_to_groups'
  belongs_to :event
  belongs_to :group, :foreign_key => 'event_groups'
end

Я также выбрал бы более описательное имя модели, чем "EventToGroup" (возможно, "Attendee" или что-то еще), но это зависит от вас.

Это должно сделать это - тогда вы можете сделать что-то вроде:

@event = Event.find(5)
@groups = event.groups

Изменить: Ack, эти отношения должны быть has_many, а не только многие. Я слишком много использовал MongoMapper.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню