Подтвердить что ты не робот

Rails (ActiveRecord) много для многих таблиц

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

В настоящее время у меня есть что-то простое:

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

has_many    :groups

Группа

has_many    :users

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

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

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

4b9b3361

Ответ 2

В 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

Ответ 3

Я [добавил] еще один столбец в [ 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. Поэтому, если вы хотите изменить этот третий столбец, вам нужно будет найти тот, который вы ищете.