Отображение устаревших столбцов базы данных в проекте rails - PullRequest
0 голосов
/ 27 марта 2010

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

Предположим, у нас есть три таблицы: event, event_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

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

1 Ответ

1 голос
/ 27 марта 2010

Несколько вещей - прежде всего, модель ActiveRecord должна быть единственной, а не множественной. Кроме того, я предполагаю, что вы имели в виду, что таблица для модели Group - это «event_groups», а не «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" (может быть, "Посетитель" или что-то в этом роде), но это зависит от вас.

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

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

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

...