Ruby on rails 查找后的Mongoid文档持久性

Ruby on rails 查找后的Mongoid文档持久性,ruby-on-rails,inheritance,mongodb,model,mongoid,Ruby On Rails,Inheritance,Mongodb,Model,Mongoid,我在mongoid中保存文档时遇到问题。我的控制器中有以下代码片段: params[:user][:residence_attributes][:locations_attributes].each do |num,location_attributes| zipcode = Location.find(location_attributes[:id]) if !zipcode.update_attributes(location_attributes) puts "fail"

我在mongoid中保存文档时遇到问题。我的控制器中有以下代码片段:

params[:user][:residence_attributes][:locations_attributes].each do |num,location_attributes|
  zipcode = Location.find(location_attributes[:id])

  if !zipcode.update_attributes(location_attributes)
    puts "fail"
    fail = true
  end

  puts "zipcode again #{zipcode}"
  puts "zipcode number #{zipcode.number}"
  puts "zipcodes = #{Zipcode.count}" 
  zipcode = Zipcode.find(@user.residence.locations[0].id)
  puts "zipcode again #{zipcode}"
  puts "zipcode number #{zipcode.number}"
  puts "zipcodes = #{Zipcode.count}" 
  zipcode = Zipcode.find(@user.residence.locations[0].id)
  puts "zipcode again #{zipcode}"
  puts "zipcode number #{zipcode.number}"
  puts "zipcodes = #{Zipcode.count}" 
end
它产生以下输出:

zipcode again #<Zipcode:0x000000063826a0>
zipcode number 11210
zipcodes = 1
zipcode again #<Zipcode:0x00000006348860>
zipcode number 
zipcodes = 1
zipcode again #<Zipcode:0x00000006340ef8>
zipcode number 
zipcodes = 1
zipcode#
邮政编码11210
zipcodes=1
又是zipcode#
zipcode编号
zipcodes=1
又是zipcode#
zipcode编号
zipcodes=1
所以问题是,当我第二次和第三次找到文档时,zipcode id为什么会改变

这是一个问题,因为文档不会持久化

我有以下型号:

class Zipcode < Location
  include Mongoid::Document
  attr_accessible :number
  attr_accessor :number

  validates_presence_of :number
  validate :check_zipcode
end

class Location
  include Mongoid::Document

  attr_accessible :latitude, :longitude
  belongs_to :locatable, polymorphic: true
end

class UserResidence
  include Mongoid::Document

  has_many :locations, as: :locatable

  embedded_in :user, :inverse_of => :residence

  attr_accessible :locations_attributes
  accepts_nested_attributes_for :locations, autosave: true

  #validates_presence_of :locations
  #validates :locations, :length => {:minimum => 1}
end
类Zipcode:residence中
属性可访问:位置属性
接受位置的嵌套属性,自动保存:true
#验证是否存在:位置
#验证:位置,:长度=>{:最小=>1}
结束

谢谢

您正在保存文档吗

尝试将autosave设置为true

见: (在页面上搜索自动保存)

根据需要,在
上设置
自动保存:true
有多个:位置

has_many :locations, as: :locatable, autosave: true
accepts_nested_attributes_for :locations

如果Autosave是真的,我会用user_居住模型更新帖子。无论哪种方式,我都在直接更新Zipcode,所以我还需要autosave吗?Mongoid中还有一个相关的Bug:这个Bug还在Mongoid 2.2.1中吗?因为这是我正在使用的版本Durran在2011年9月10日b064b05结束了这个问题--它的里程碑是2.2.1。。。隐马尔可夫模型。。。也许你应该把它报告为回归?