2015-01-02 2 views
3

Итак, я установил Devise и rails_admin в моей текущей настройке. Я сейчас пытаюсь использовать рельсы для сценариев администрирования.Rails_Admin Несколько моделей пользователей + Devise

Поскольку я полагал, что многим администрациям требуется несколько «пользовательских» моделей, я столкнулся с трудностями при определении правильного пути проектирования и организации их отношений.

Так что прямо сейчас у меня есть пользовательская (изобретательная) модель.

Для моделей пользователей я решил разделить модели, которые мне нужны (администратор, ученик (пример), профессор (пример)).

Я читал вокруг и обнаружил, что ИППП, кажется, решение здесь, поэтому я их быть

class User < ActiveRecord::Base 
    devise :database_authenticatable, 
      :recoverable, :rememberable, :trackable, :validatable 
end 

class Student < User 
end 

class Professor < User 
end 

В rails_admin, CRUD Пользователь в основном делается, и с помощью этой установки мне удалось найти конфигурация, которую я хочу. Например, создание студента будет признано пользователем. Однако у меня возникают проблемы с тем, есть ли у меня правильная настройка или нет, так как мне действительно может потребоваться, чтобы у Студента были свои собственные атрибуты (например, student_id или major, просто бросая вещи здесь). Использование предыдущей настройки, о которой я говорил, позволит мне создать их только с помощью атрибутов модели пользователя, а не самого студента.

Я также читал откуда-то, что мне нужно иметь тип столбца в User, который может быть заполнен либо студентом, либо профессором, но у меня возникли проблемы с объединением всех этих решений.

Любые указатели/предложения о том, как я должен действовать сейчас? Очень признателен.

+0

Получил его, используя полиморфные ассоциации.Тем не менее, создание Пользователя, являющегося студентом через rails_admin, требует от меня сначала создать объект «Студент», и только тогда создаст Пользователь, чтобы я мог установить объект «Студент» как пользователя и пользователя в качестве ученика. Это выглядит громоздким, и было бы лучше, если бы я мог создать ученика напрямую, а не идти туда и обратно в пользовательский раздел. Есть идеи по этому поводу? Также, как я могу установить атрибуты из пользовательской модели в разделе «Студент»? Я установил атрибуты, такие как имя, в «Пользователь» и оставил ученика «майор» и т. Д. –

+0

Просто предложение: если ответы ниже будут работать для вас, вы можете принять его? Кроме того, вы можете опубликовать комментарий выше как два новых вопроса: 1) rails_admin, 2) доступ к атрибутам. – roob

+0

@roob, извините за задержку. Спасибо за помощь. –

ответ

3

Если вы решили использовать Single Table Inheritance:

  • атрибут type используется Rails для достижения соответствующей модели и ее сделано автоматически. то есть, когда вы делаете Student.new, атрибут type установлен в положение «Студент»

  • атрибуты всех унаследованных классов (студент, профессор, и т.д.) все хранятся в users таблице. Это означает, что и у Студента, и у Профессора будут major, fees_schedule и т. Д. (Которые обычно не применяются к профессорам).

Вот документация о Single Table Inheritance

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

class User < ActiveRecord::Base 
    belongs_to :member, polymorphic: true 
    ... 
end 

class StudentMember < ActiveRecord::Base 
    has_one :user, as: :member 
    ... 
end 

class ProfessorMember < ActiveRecord::Base 
    has_one :user, as: :member 
    ... 
end 

прочитанных Дополнительная информация о Полиморфные ассоциации here

Polymorp hic Ассоциации кажется более уместным в вашем случае, так как есть, вероятно, много разных атрибутов для студентов, преподавателей, администраторов и т. д., и это будет выглядеть довольно грязно, если вы сбросите все их в таблицу users.

+0

Привет, получил его работу, используя полиморфные ассоциации. Теперь я вижу, что Студент отдельно от Пользователя. Тем не менее, создание Пользователя, являющегося студентом через rails_admin, требует от меня сначала создать объект «Студент», и только тогда создаст Пользователь, чтобы я мог установить объект «Студент» как пользователя и пользователя в качестве ученика. Это выглядит громоздким, и было бы лучше, если бы я мог создать ученика напрямую, а не идти туда и обратно в пользовательский раздел. Есть идеи по этому поводу? –

+0

Извините, я не использую rails_admin и не могу вам помочь. – roob

Смежные вопросы