Мы создаем приложение 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 должна быть единственной, а не множественной. Кроме того, я полагаю, вы имели в виду, что таблица для модели группы - это "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.