Динамически добавлять / изменять ассоциации activerecord - PullRequest
1 голос
/ 21 апреля 2011

У меня есть то, что я думаю, не было бы уникальной ситуации с ActiveRecord, но я не могу найти никого с подобной проблемой, поэтому вот так:

У меня есть класс User для пользователейи класс Roles, который определяет возможности пользователя.Например, у вас может быть пользователь с ролью «наставник», пользователь с ролью «студент» и пользователь с ролью «[tutor», «студент»]:

class User < ActiveRecord::Base
  has_many :roles
end

class Role < ActiveRecord::Base

end

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

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

Я подумал о том, чтобы сделать что-то вроде:

class User < ActiveRecord::Base

  protected

  after_initialize do
    if self.has_role?(Role::STUDENT)
      has_many :courses # This does not work
    else
      # etc etc etc
    end
  end
end

Но я понятия не имею, считается ли это неправильным или как я мог бы заставить это работать.Каков наилучший метод для работы с такого рода настройкой пользователя / роли с помощью ассоциаций?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2011

Я бы сделал следующее:

class User < ActiveRecord::Base
  has_many :roles
end

class Role < ActiveRecord::Base
end

class Tutor < Role
  has_one :subject
end

class Student < Role
  has_many :courses
end
0 голосов
/ 21 апреля 2011

Я бы порекомендовал драгоценный камень для вашей проблемы. См. Связанный вопрос SO: Рекомендация для Role Gem

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