2010-06-30 3 views
0

J'ai créé un tableau en utilisant cette déclaration ..Question sur update_all dans Ruby

users_who_promoted = @organization.card_signups.select {|c| c.credit_status == true } 

mais quand je le fais:

users_who_promoted.update_all("credit_status = false") 

Je reçois une grande erreur:

NoMethodError: undefined method `update_all' for #<Array:0x32377bc> 
from (irb):25 

Pourquoi est-ce?

Répondre

1

Aha! Cela semble fonctionner ..

unless @organization.card_signups.empty? 
    @organization.card_signups.update_all("credit_status = false") 
end 
+0

Intéressant ... cela ne semble pas fonctionner dans ma version de Rails (2.1.2), mais je suppose que c'est ce que j'ai pour vivre à l'âge de pierre. – bnaul

+0

C'est 2.3.5 .. Mais c'est essentiellement ce que vous avez suggéré en utilisant la méthode directement sur le modèle qui est dans ce cas lié au modèle d'organisation. – Trip

1

Vous appelez update_all sur un tableau d'instances ActiveRecord, lorsqu'il s'agit en fait d'une méthode statique. Votre appel doit être User.update_all (ou CardSignup, ou peu importe votre classe), puis la mise à jour, puis les conditions.

Voir: http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001787

EDIT pour manque de clarté: ayant ce tableau de valeurs est utile que dans la mesure où il vous permet de construire une condition de passer à update_all, de la forme « id IN (# {users_who_promoted. map {| u | u.id} .join (",")}) ". Si vous ne pensez pas que cela créera un goulot d'étranglement dans les performances de votre application, la simple mise à jour et l'enregistrement de chaque objet du modèle seront peut-être plus lisibles.