7
votes

Comment supprimer un document intégré à Mongomapper?

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


0 commentaires

3 Réponses :


15
votes

Les couvertures sont stockées comme une matrice dans un objet de film, vous pouvez donc faire par exemple: xxx

ou si vous souhaitez être sélectif xxx < / p>


2 commentaires

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



1
votes

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


1 commentaires

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?



0
votes

Voici un GIST complet rapide et sale pour supprimer un document intégré d'une association. Répété ici: xxx


0 commentaires