Эй, это мой первый пост, так что скажите мне, если я не даю вам достаточно информации
Итак, я пробую 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 проектов, когда я добавлю один.
Странно то, что когда я использую терминал Монго для проверки базы данных, он показывает, что у Джона есть один проект «Редактор», код которого не найден в john.projects.size.
В идеале порядок, в котором я вызываю add_project и has_project?не должно влиять на код и значение.