Моноидальное сохранение документа после поиска - PullRequest
3 голосов
/ 02 октября 2011

У меня проблемы с сохранением документов в 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

Итак, вопрос в том, почему меняется идентификатор почтового индекса, когда я нахожу документво второй и третий раз?

Это проблема, потому что документ не сохраняется.

У меня есть следующие модели:

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

Спасибо

Ответы [ 2 ]

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

вы сохраняете документ?

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

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

0 голосов
/ 18 ноября 2011

Согласно http://mongoid.org/docs/relations/nested_attributes.html вам необходимо установить autosave: true на has_many :locations.

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