Много ко многим настойчивость рубиновый монгоид - PullRequest
0 голосов
/ 01 сентября 2011

Эй, это мой первый пост, так что скажите мне, если я не даю вам достаточно информации

Итак, я пробую 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?не должно влиять на код и значение.

  • спасибо

Ответы [ 2 ]

0 голосов
/ 03 октября 2011

попытаться установить для автосохранения значение true

см .: http://mongoid.org/docs/upgrading.html (поиск на странице для автосохранения)

0 голосов
/ 02 сентября 2011

Не вижу ничего плохого в вашем коде, но я получил те же результаты, что и вы, запустив его здесь.

Похоже, это может быть известная проблема - https://github.com/mongoid/mongoid/issues/1198

...