2010-10-11 6 views
6

J'ai une relation d'association polymorphique qui se passe, et quand je récupérer un disque à travers elle, comme:méthode non définie de update_attribute » pour ActiveRecord :: Relation quand appelé enregistrement récupéré par héritage

hour = my_model.find(keeper_id).hours.where("day = ?", day_index) 

Ensuite, essayez de update_attributes appelle là-dessus:

hour.update_attribute(:start_time, start_time) 

Je reçois une erreur:

NoMethodError (undefined method `update_attribute' for #<ActiveRecord::Relation:0x0000010458c708>): 
    activerecord (3.0.0) lib/active_record/relation.rb:373:in `method_missing' 

Je suppose que c'est parce que j'ai récupéré le disque à travers la relation. Comment puis-je contourner cela?

Répondre

17

L'attribut de mise à jour fonctionne sur un seul enregistrement et non sur une collection. Utilisez plutôt update_all (la syntaxe est légèrement différente).

+7

vous pouvez également ajouter un ".first" qui transforme la collection en un seul enregistrement – 0x4a6f4672