【问题标题】:Mongoid document persistence after find查找后的 Mongoid 文档持久性
【发布时间】:2011-10-02 05:08:13
【问题描述】:

我无法在 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

那么问题是为什么我第二次和第三次找到文档时邮政编码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

谢谢

【问题讨论】:

    标签: ruby-on-rails inheritance mongodb model mongoid


    【解决方案1】:

    您要保存文档吗?

    尝试将自动保存设置为 true

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

    【讨论】:

    • 自动保存是真的,我会用 user_residence 模型更新帖子。无论哪种方式,我都直接更新邮政编码,所以我还需要自动保存吗?
    • Mongoid 中还有一个相关的Bug:github.com/mongoid/mongoid/issues/1198
    • 这个bug还在mongoid 2.2.1中吗?因为这是我正在使用的版本
    • durran 于 2011 年 9 月 10 日在 b064b05 中关闭了该问题——里程碑是 2.2.1 ...嗯...也许您应该将其报告为回归?
    【解决方案2】:

    根据http://mongoid.org/docs/relations/nested_attributes.html,您需要在has_many :locations 上设置autosave: true

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      相关资源
      最近更新 更多