Rails (ActiveRecord) таблица «многие ко многим» - PullRequest
12 голосов
/ 21 июля 2009

У меня есть две модели: пользователи и группы. В каждой группе может быть много пользователей, и каждый пользователь может входить в несколько групп.

У меня сейчас есть что-то простое:

Пользователь:

has_many    :groups

Группа:

has_many    :users

Итак, у меня есть таблица groups_users, которая просто создает строки с group_id и user_id. Я хочу добавить к этому еще один столбец (который у меня есть), вопрос в том, как получить к нему доступ из модели без использования специального вызова SQL? В групповой модели я могу зайти на self.users, а на пользователя - на self.groups

Есть ли способ изменить третий столбец в этой таблице по сравнению с моделью пользователя?

Извините, если это сбивает с толку, пожалуйста, сообщите об этом

Ответы [ 3 ]

14 голосов
/ 21 июля 2009

Вот пара учебных пособий, которые должны помочь. По сути, есть два подхода к работе «многие ко многим»: has_and_belongs_to_many или has_many: through (рекомендуется).

ссылки:

  1. http://blog.hasmanythrough.com/2006/4/20/many-to-many-dance-off
  2. http://railscasts.com/episodes/47-two-many-to-many
  3. http://railscasts.com/episodes/154-polymorphic-association
8 голосов
/ 17 ноября 2012

В Rails 3 вы хотите создать таблицу соединения для множества отношений, используя множественные имена таблиц, которые вы хотите объединить в алфавитном порядке. Так что в этом случае это будет groups_users.

модель

class GroupsUser < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
end

class User < ActiveRecord::Base
  has_many :groups_users
  has_many :groups, :through => :groups_users
end

class Group < ActiveRecord::Base
  has_many :groups_users
  has_many :users, :through => :groups_users
end
2 голосов
/ 21 июля 2009

Я [добавил] еще один столбец в [users_groups] ... Вопрос в том, как сделать Я получаю к нему доступ из модели без использования пользовательский вызов SQL?

Похоже, вы хотите получить доступ к столбцу таблицы user_groups, вызвав метод для вашей модели User или Group.

Некоторые предложения:

Я бы назвал таблицу "user_groups" для работы с ожиданиями плюрализации ActiveRecord, но я не уверен, что это важно.

Следуя совету Дейва, вы захотите все настроить, используя технику "has_many :through" ...

# Declare a Model based on the many-to-many linking table.
class UserGroup < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
end

class User < ActiveRecord::Base
  has_many :user_groups
  has_many :groups, :through => :user_groups
end

class Group < ActiveRecord::Base
  has_many :user_groups
  has_many :users, :through => :user_groups
end

Есть ли способ изменить третий столбец в этой таблице по сравнению с моделью пользователя?

Это немного неясно, но имейте в виду, что каждый User может иметь много UserGroups. Поэтому, если вы хотите изменить этот третий столбец, вам нужно найти тот, который вы ищете.

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