Je gère une application Sinatra avec Mongomapper. J'ai des modèles appelés film (document) et couverture (emballerdDocument). J'ai incorporé des couvertures dans des films en utilisant
@movie.covers.each do |c| c.destroy end NoMethodError: undefined method `destroy' for #<Cover:0xb7b20734> from (irb):5 from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `call' from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `method_missing' from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `each' from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `send' from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `method_missing' from (irb):4 from :0
3 Réponses :
Les couvertures sont stockées comme une matrice dans un objet de film, vous pouvez donc faire par exemple: ou si vous souhaitez être sélectif p>
Merci pzol. Ça m'a aidé. Il serait très utile que vous vous tiriez à jour comment je peux mettre à jour les couvertures.
Vous chargez le film. Les couvertures sont une matrice, vous devez donc en choisir un, modifier ses champs, puis enregistrer: par exemple @movie = film.find (: d'abord) @ film.Covers [0] .name = "Nom mis à jour" @ Movie.Save
Cela fonctionne si votre suppression basée sur un attribut comme un nom, mais si vous connaissez déjà l'identifiant et que vous souhaitez la supprimer, utilisez ce truc sur POST DE TUBMLR de P-ROB :
def destroy @phone_number = @person.phone_numbers.find(params[:id]) @person.phone_numbers.delete_if{|phone_number| phone_number.id == @phone_number.id} if @person.save redirect_to @person else flash[:error] = "dag, yo." end end
Et si vous ne voulez pas charger l'ensemble de la matrice en mémoire avant de supprimer? N'y a-t-il pas une opération qui le supprimera de la base de données?
Voici un GIST complet rapide et sale pour supprimer un document intégré d'une association. Répété ici: