Ner*_*ian 6 ruby-on-rails mongodb devise mongoid
我正在开发Ruby on Rails 3应用程序,这是我第一次使用MongoDB.
我一直在思考这个问题几天,我找不到一个好的解决方案.我想讨论两个问题.
该申请是一名学校课程经理.它管理着许多学校,其中包含许多学生,课程,教授和任务.
一所学校的结构 - 有很多 - 是:
学校
主任是学校的管理员.他是唯一一个可以创建教授,学生和课程的人.
关于如何使用Mongoid在MongoDB上构建这个模型集合,我有几天了,我找到了一个可能的解决方案.然而,我来自一个关系数据库世界,也许这是一个糟糕的解决方案,我滥用'嵌入':)
楷模:
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
Run Code Online (Sandbox Code Playgroud)
另外,我想我会用这个类包装一个集合任务.教授创建一个TaskCollection并为其分配学生.
class TaskCollection
include Mongoid::Document
field :name
references_many :students, :stored_as => array, :class => "User"
references_one :task
end
Run Code Online (Sandbox Code Playgroud)
所以这是我的第一个问题.我需要反馈.这是使用面向文档的数据库的正确方法吗?性能?改进?错误?
第二个问题.我们如何在Devise中集成它?
我的第一次尝试是这样的:
的routes.rb
devise_for:users,:path =>'schools /:school_id/users'
资源:学校做资源:文件,:只有=> [:index]资源:任务,:只有=> [:index]
结束
但是,当我尝试注册和用户时,我收到一个错误.
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.
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助.
我自己刚刚开始玩 Devise 和 Mongoid。
您的迫切需要是使 User 成为根文档(即不嵌入),这就是 Devise 期望与 User 模型交互的方式。我不知道是否可以轻松地覆盖它来执行您想要的操作。就我个人而言,即使可以,我也不认为这有多大意义。
至于你的文档设计问题,你应该看看 Mongdb http://www.mongodb.org/display/DOCS/Schema+Design#SchemaDesign-Embedvs.Reference
从您的示例中,我认为 User 对象是一个“First Class”对象,它将保证其自己的集合。
| 归档时间: |
|
| 查看次数: |
2433 次 |
| 最近记录: |