【发布时间】:2011-09-01 16:05:10
【问题描述】:
这是我的第一篇文章,如果我没有给你足够的信息,请告诉我
所以,我正在尝试 ruby1.9.2 并将 mongoid2.2.0 与 mongodb1.8.2 一起使用,但我无法在代码中以多对多关系持久化数据库文档。
require 'mongoid'
require 'mongo'
Mongoid.load!("../Configurations/mongoid.yml")
Mongoid.configure do |config|
config.master = Mongo::Connection.new.db("godfather")
end
connection = Mongo::Connection.new
connection.drop_database("godfather")
database = connection.db("godfather")
class Project
include Mongoid::Document
field :name, type: String
key :name
field :numPeople, type: Integer
has_and_belongs_to_many :people
end
class Person
include Mongoid::Document
field :name, type: String
key :name
field :numProjects, type: Integer, default: 0
has_and_belongs_to_many :projects
def add_project(project_name)
project = Project.create(name: project_name)
self.numProjects = self.numProjects + 1
self.projects << project
self.save
end
def has_project?(project_name)
self.projects.each do |project|
if project.name.upcase == project_name.upcase
return true
end
end
return false
end
end
database = Project.create(name: "Database")
alice = Person.create(name: "Alice")
alice.add_project("Database")
puts "has project? #{alice.has_project?("Database")}"#outputs true
puts "Alice has #{alice.numProjects} projects"#outputs 1
puts "Alice really has #{alice.projects.size} projects"#outputs 1
editor = Project.create(name: "Editor")
john = Person.create(name: "John")
john.has_project?("Editor")
john.add_project("Editor")
puts "has project? #{john.has_project?("Editor")}"#outputs false
puts "John has #{john.numProjects} projects"#outputs 1
puts "John really has #{john.projects.size} projects"#outputs 0
operatingSystem = Project.create(name: "OperatingSystem")
drinking = Project.create(name: "Drinking")
henry = Person.create(name: "Henry")
henry.add_project("OperatingSystem")
henry.has_project?("OperatingSystem")
henry.add_project("drinking")
henry.add_project("Editor")
puts "Henry has #{henry.numProjects} projects"#outputs 3
puts "Henry really has #{henry.projects.size} projects"# outputs 3
所以问题是当我添加一个项目时,约翰输出他有 0 个项目。
奇怪的是,当我使用 mongo 终端检查数据库时,它显示 john 拥有一个项目“Editor”,而代码在 john.projects.size 中找不到该项目。
理想情况下,我调用 add_project 和 has_project 的顺序是什么?不应影响代码和事项。
- 谢谢
【问题讨论】:
标签: ruby persistence many-to-many mongoid