Я занимаюсь разработкой приложения на Ruby on Rails 3, и впервые использую MongoDB.
Пару дней я размышлял над этой проблемой и не могу найти хорошего решения. Есть две проблемы, которые я хочу обсудить.
- Модель
- Как интегрировать это с Devise
Приложение - менеджер школьных курсов. Он управляет многими школами, в которых много учеников, курсов, профессоров и задач.
Структура одной школы - там много - это:
Я подумал пару дней о том, как создать архитектуру этой коллекции моделей на MongoDB с использованием Mongoid, и я нашел возможное решение. Все же я из мира реляционных баз данных, и, возможно, это ужасное решение, и я злоупотребляю «embed»:)
- Коллекционные школы
- Школа 1
- Вставить директора
- Вставить пользователей
- Embed Courses
- Вставить задачи
- Школа 2
- Вставить директора
- Вставить пользователей
- Embed Courses
- Вставить задачу
Модель:
class User
include Mongoid::Document
field :first_name
field :last_name
field :email
embedded_in :school, :inverse_of => :director
embedded_in :school, :inverse_of => :students
embedded_in :school, :inverse_of => :professors
end
class School
include Mongoid::Document
field :name
key :name
embeds_one :director, :class_name => "User"
embeds_many :students, :class_name => "User"
embeds_many :professors, :class_name => "User"
validates :name, :presence => true
end
class Task
include Mongoid::Document
field :name
references_one :student, :class => "User"
references_one :course
end
Кроме того, я думаю, что я буду использовать этот класс для переноса задач. Профессор создает коллекцию TaskCollection и назначает в нее студентов.
class TaskCollection
include Mongoid::Document
field :name
references_many :students, :stored_as => array, :class => "User"
references_one :task
end
Так что это мой первый вопрос. Мне нужна обратная связь. Это правильный способ использовать документно-ориентированную базу данных? Спектакль? Улучшения? Ошибки?
И второй вопрос. Как мы можем интегрировать это в Devise?
Моя первая попытка такая:
Routes.rb
devise_for: users,: path => 'schools /: school_id / users'
ресурсов: школы делают
ресурсы: документы,: только => [: индекс]
ресурсы: задачи,: только => [: индекс]
конец
Но когда я пытаюсь зарегистрироваться и зарегистрироваться, я получаю сообщение об ошибке.
http://localhost:3000/schools/pablo-de-olavide/users
Mongoid::Errors::InvalidCollection in Devise/registrationsController#create
Access to the collection for User is not allowed since it is an embedded document, please access a collection from the root document.
Большое спасибо за вашу помощь.