【问题标题】:Many to many persistence ruby mongoid多对多持久性 ruby​​ mongoid
【发布时间】:2011-09-01 16:05:10
【问题描述】:

这是我的第一篇文章,如果我没有给你足够的信息,请告诉我

所以,我正在尝试 ruby​​1.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


    【解决方案1】:

    看不出您的代码有什么问题,但我得到的结果与您在此处运行的结果相同。

    看起来这可能是一个已知问题 - https://github.com/mongoid/mongoid/issues/1198

    【讨论】:

    • 哦,好的,它正在处理中。我想我可以等待修复。重新加载现在有效。谢谢
    【解决方案2】:

    尝试将自动保存设置为 true

    查看:http://mongoid.org/docs/upgrading.html(在页面上搜索自动保存)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-06
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多