Ruby on rails 与Mongoid的集成设计
我正在开发一个RubyonRails3应用程序,这是我第一次使用MongoDB 我已经思考了几天这个问题,但我没有找到一个好的解决办法。我想讨论两个问题Ruby on rails 与Mongoid的集成设计,ruby-on-rails,mongodb,devise,mongoid,Ruby On Rails,Mongodb,Devise,Mongoid,我正在开发一个RubyonRails3应用程序,这是我第一次使用MongoDB 我已经思考了几天这个问题,但我没有找到一个好的解决办法。我想讨论两个问题 模型 如何将此与设计相结合 申请者是学校课程经理。它管理着许多学校,包括许多学生、课程、教授和任务 一所学校——有很多——的结构是: 学校 导演 学生 教授 课程 任务 主任是学校的行政人员。他是唯一能够创造教授、学生和课程的人 正好有一个导演 可以有(0–多个)课程 可能有(0–多)个学生 可能有(0–多)位教授 学生可能参加(0–多个
- 学校
- 导演
- 学生
- 教授
- 课程
- 任务
- 主任是学校的行政人员。他是唯一能够创造教授、学生和课程的人
- 正好有一个导演
- 可以有(0–多个)课程
- 可能有(0–多)个学生
- 可能有(0–多)位教授
- 学生可能参加(0–多个)课程
- 教授可能参加(0–多个)课程
- 对于每门课程,可能有(0–多)项任务与(0–多)名学生相关。是的,教授可以向特定的学生发送特定的任务
- 收藏学校
- 第一学校
- 嵌入控制器
- 嵌入用户
- 嵌入课程
- 嵌入任务
- 学校2
- 嵌入控制器
- 嵌入用户
- 嵌入课程
- 嵌入任务
- 第一学校
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
另外,我想我将使用此类包装集合a任务。教授创建任务集合并分配给学生
class TaskCollection
include Mongoid::Document
field :name
references_many :students, :stored_as => array, :class => "User"
references_one :task
end
这是我的第一个问题。我需要反馈。使用面向文档的数据库是否正确?演出改进?错误
第二个问题。我们如何将此集成到Desive中
我的第一次尝试是:
Routes.rb
为:用户设计,路径=>'schools/:school\u id/users'
资源:学校有
资源:文档,:only=>[:索引]
资源:任务,:仅=>[:索引]结束 但当我尝试注册用户时,我得到了一个错误
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.
非常感谢你的帮助 我自己刚开始玩Desive和Mongoid 您当前的需要是将用户设置为根文档(即,不嵌入),这就是Desive希望与用户模型交互的方式。我不知道它是否可以很容易地被覆盖,以实现您想要的。就我个人而言,即使你能做到,我也不认为这有什么意义 至于您的文档设计问题,您应该从Mongdb了解一下
从你的例子中,我认为用户对象是一个“第一类”对象,它可以保证它自己的集合。
< P>这里是从设计wiki与将用户嵌入到另一个模型的信息:的链接。Desive github项目页面中有一个wiki页面,介绍了如何使用嵌入文档和Desive。但我没那么幸运。我将按照您的建议,在根级别创建一个用户集合。然后将学生和教授植入学校。学生和教授都有用户的参考资料。用户拥有一所学校的参考资料。我认为这是最好的性能明智的方法。