Может ли Rails Active Record понять две одновременные взаимосвязи между двумя таблицами одновременно? - PullRequest
0 голосов
/ 29 января 2010

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

Итак, я создал have_and_belongs_to_many отношения между пользователями и группами с использованием объединенной таблицы groups_users. Это все работает, как и ожидалось.

Я также хотел бы указать группу ACTIVE для каждого пользователя. Если бы не было отношения habtm, которое я уже определил, я бы создал столбец «group_id» в пользователях для активной группы, а затем я бы определил отношение «один ко многим» между моделями следующим образом:

class User < ActiveRecord::Base
  belongs_to :group
end

class Group < ActiveRecord::Base
  has_many :users
end

Это не сработало. Мне не удалось получить доступ к свойствам группы, таким как «@ user.group.name». Я подозреваю, что слишком много спрашиваю о Rails, указав два отношения.

Итак, у меня три вопроса.

  1. Я мог бы очень легко понять, если объединение двух отношений приводит к путанице в Active Record. Это тот случай?
  2. Если так, как бы вы реализовали эти отношения? Прямо сейчас я просто использую group_id, но это кажется грязным.
  3. Независимо от того, использую ли я активную активную запись или вручную устанавливаю активную группу, активная группа пользователя может находиться за пределами группы, к которой он принадлежит, с использованием первого отношения habtm. Любые мысли о том, как реализовать это с ограничением, что активная группа должна быть группой, к которой принадлежит пользователь?

Спасибо за любые идеи. Я нахожусь на пару недель в изучении Rails и думаю, что понимание этой маленькой проблемы значительно углубит мое понимание моделей и взаимосвязей таблиц.

1 Ответ

1 голос
/ 29 января 2010

Грэг - Я делал это раньше, похоже на то, что ты предлагаешь. Я использовал «primary_group» вместо «group» и установил для Foreign_key значение «primary_group_id» и: class_name => 'Group'

Я не очень часто использую has_and_belongs_to_many, поэтому не знаю, будет ли это вызывать проблему, но я так не думаю - по крайней мере, не с моделью пользователя. У вас нет метода #group, поэтому установка own_to должна быть в порядке. Я не знаю, должен ли у вас обязательно быть метод has_many: users в группе, но он вам может все равно не понадобиться. Это, безусловно, вызовет коллизию с методом 'users', который создает habtm. Если вам это нужно, попробуйте has_many: primary_users и установите: foreign_key =>: primary_group_id

Просто некоторые мысли. Вы должны быть в состоянии сделать то, что делаете сейчас, поэтому не знаете, что не получается.

...