3 Stimmen

Mongoid update_attributes wird nicht persistiert

Hier ist ein einfaches Modell.

class Event
  include Mongoid::Document

  field :name, type: String
  field :schedule, type: String
  field :description, type: String
  field :active, type: Boolean, default: true
  key :name

end

1. wir erstellen und veranstalten

ruby-1.9.2-p0 > event = Event.new(:name => "event1")
 => #<Event _id: event1, _type: nil, _id: "event1", name: "event1", schedule: nil, description: nil, active: true> 
ruby-1.9.2-p0 > event.save!
 => true

2. Kennen Sie, finden Sie das Ereignis

ruby-1.9.2-p0 > event = Event.find("event1")
=> #<Event _id: event1, _type: nil, _id: "event1", name: "event1", schedule: nil, description: nil, active: true> 

3.So aktualisieren Sie Ereignisattribute

ruby-1.9.2-p0 > event.update_attributes!(:name => "new name")
 => true 

4. versuchen wir, das Ereignis zu finden

ruby-1.9.2-p0 > event = Event.find("new name")
Mongoid::Errors::DocumentNotFound: Document not found for class Event with id(s) new name.

5.ooops nicht gefunden, aber die alte Version ist noch vorhanden

ruby-1.9.2-p0 > event = Event.find("event1")
 => #<Event _id: event1, _type: nil, _id: "event1", name: "event1", schedule: nil, description: nil, active: true>

Was mache ich falsch? Ich hoffe, das ist kein Fehler.

3voto

Dylan Markow Punkte 120337

Ich glaube nicht, dass man mit MongoDB eine _id Feld. Wenn ich es mit der Standard-Mongo-Shell versuche, erhalte ich diese Fehlermeldung (was bedeutet, dass es sich nicht um eine Einschränkung von Mongoid handelt, sondern um eine Einschränkung in der eigentlichen Mongo-Software):

Mod on _id not allowed

Wann immer Sie die name müssen Sie das wahrscheinlich tun:

  1. Kopieren Sie ihn in einen neuen Datensatz mit dem neuen Namen.
  2. Löschen Sie den alten Datensatz

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X