Quando si accede a un documento tramite mongoid, viene restituito un oggetto Ruby. È possibile visualizzare i dati memorizzati nel documento solo tramite mongo shell (è sufficiente digitare "mongo" nel terminale dell'utente).
L'oggetto è stato creato da Mongoid (MongoDB ODM/wrapper for rails). Talvolta questo oggetto può apparire diverso dal documento.
Per esempio
quando si torna dall un campo, quel campo è interamente rimosso da quel documento. MA, poiché il tuo modello ha ancora quel campo, MONGOID ti restituisce un attributo nullo per quel campo, invece di darti un numero diverso di campi per oggetti dello stesso modello.
Modello book.rb
class Book
include Mongoid::Document
field :name
field :author
end
In console rotaie, tipo
Book.create(name: "b1", author: "a1")
=> #<Book _id: 555231746c617a1c99030000, name: "b1", author: "a1">
In Mongo shell
db.books.find()
{ "_id" : ObjectId("555231746c617a1c99030000"), "name" : "b1", "author" : "a1" }
Ora, abbiamo disinserita.
Nella console rotaie
Book.first.unset(:name)
=> #<Book _id: 555231746c617a1c99030000, name: nil, author: "a1">
In Mongo shell
db.books.find()
{ "_id" : ObjectId("555231746c617a1c99030000"), "author" : "a1" }
Se invece ancora Non volete vedere il campo nella tua console rotaie (si badi bene, questo non sta prendendo qualsiasi spazio in più in db) puoi sempre rimuovere il campo dal modello. Se lo fai, non sarai più in grado di accedere a questo campo attraverso le rotaie/mongoi su qualsiasi oggetto. Sarà presente solo nel documento e accessibile tramite la shell mongo.
Il mio requisito è che dopo averlo rimosso, quando ricevo la chiamata successiva, non dovrei ottenere quell'attributo. Ma lo ottengo con un valore nullo. –
Sto recuperando l'intero oggetto e restituendolo. Book.find (params [: id]), non accede a singoli campi. Hai ragione. remove_attribute lo rimuove da mongodb ma poi perché lo ottengo come zero quando faccio Book.find (params [: id]) o Book.all? –
Sì, è corretto. Molte grazie! Ho perso una cosa così banale. –