Ruby on rails 需要关于使用Rails/Mongoid进行MongoDB建模的建议吗
我正在开发一个简历模板应用程序。该项目使用Rails 4.0、Desive、MongoDB和bootstrap 这就是我的模型目前的结构。我使用多态关联是为了在应用程序增长时允许更大的灵活性,用户可以拥有多份简历。我省略了一些不相关的模型代码和一些较小的模型,例如与我的问题不相关的教育、技能:Ruby on rails 需要关于使用Rails/Mongoid进行MongoDB建模的建议吗,ruby-on-rails,ruby,mongodb,mongoid,Ruby On Rails,Ruby,Mongodb,Mongoid,我正在开发一个简历模板应用程序。该项目使用Rails 4.0、Desive、MongoDB和bootstrap 这就是我的模型目前的结构。我使用多态关联是为了在应用程序增长时允许更大的灵活性,用户可以拥有多份简历。我省略了一些不相关的模型代码和一些较小的模型,例如与我的问题不相关的教育、技能: class User include Mongoid::Document include Mongoid::Timestamps has_many :resumes has_many :e
class User
include Mongoid::Document
include Mongoid::Timestamps
has_many :resumes
has_many :educations, as: :educatable
has_many :skills, as: :skillable
has_many :positions, as: :positionable
has_one :address, as: :addressable
field :name, :type => String
field :email, :type => String, :default => ""
field :encrypted_password, :type => String, :default => ""
validates_presence_of :name
validates_uniqueness_of :name, :email
class Resume
include Mongoid::Document
include Mongoid::Timestamps
belongs_to :user
has_many :educations, as: :educatable
has_many :skills, as: :skillable
has_many :positions, as: :positionable
has_one :address, as: :addressable
field :objective, :type => String
validates_presence_of :objective
end
首先,我将实现以下功能:
- 身份验证(已完成)
- 用户可以查看简历(已完成)
- 用户可以创建简历(正在进行)
Tecume::Application.routes.draw do
devise_for :users, :controllers => { :registrations => "registrations"}
resources :users do
resources :resumes, only: [:show, :new, :create]
end
root 'pages#home'
get '/ui/:action', controller: 'ui'
end
评论太少了,所以我会做一些手势回答 您的朋友正在谈论嵌入式文档:
Resume.where('address.city' => 'Whistler')
- 而不是
有一个
- 而不是
有许多
embeddes\u one
关系;如果你用散列填充一个数组字段,并将它们全部封装在类中,那么你几乎就有了一个embeddens\u many
关系
MongoDB没有连接,因此如果您需要同时查询两件事情,它们要么是反规范化并复制数据,要么是将一件事情嵌入另一件事情中。例如,如果您想查找惠斯勒人的所有简历,并且您正在使用has__one
,那么您必须查找惠斯勒所在城市的所有地址:
addr_ids = Address.where(:city => 'Whistler').pluck(:id)
然后进行单独查询以查找简历:
Resume.where(:address_id.in => addr_ids)
如果使用嵌入文档,则只需查看嵌入文档的内部:
Resume.where('address.city' => 'Whistler')
类似地,对于快速加载:嵌入文档作为其父文档的一部分从数据库中出来,非嵌入文档需要单独的查询
粗略的经验法则:如果某事物需要成为自身的一个实体,那么传统的
有很多
,而有一个
关系是有意义的,如果某事物只存在于与其他事物相关的事物中,那么嵌入一个
或嵌入多个
是有意义的。我想你的朋友说的是嵌入文档:而不是有一个
,而不是有多个
。对,他可能指的是嵌入文档,与传统的ActiveRecord关系相比,使用嵌入式关系更可取吗?这有什么好处?我明白了,那么从你的话来看,我不能写简历。where('address.city':“Whistler”),意味着我必须使用Embeddes_one。那么,在我的示例中使用嵌入似乎更有意义。例如,我所面临的困难是如何让用户和简历模型都能访问某个职位。嵌入文档是否处理多态关联?谢谢您的帮助。是的,您可以通过嵌入式文档来实现这一点。检查文档的多态性部分: