2010-08-04 4 views

Répondre

4

Cela dépend si vous souhaitez effectuer une mise à jour SQL groupée ou effectuer une mise à jour sur chaque modèle qui appelle également la validation et la chaîne de rappel normale.
Si vous voulez instancier les objets et exécuter la chaîne de rappel faire:

Model.find(:all, :conditions => ["recipient_id = ? and inbox_id = ? and status='unread'", current_user.id, @inbox.id]).each do |obj| 
    obj.update_attributes(...) 
end 

Si vous voulez faire la mise à jour de SQL:

Model.update_all("attr1='something', attr2=true,...", ["recipient_id = ? and inbox_id = ? and status='unread'", current_user.id, @inbox.id]) 

Assurez-vous d'utiliser le formulaire de tableau de conditions pour assurer vous avez correctement échappé à votre SQL.

0
Model.update_all("foo='bar'", "recipient_id = #{current_user.id} and inbox_id = #{@inbox.id} and status='unread'") 
1

Vous pouvez également effectuer la mise à jour SQL en masse en utilisant les conditions where, que je trouve plus lisibles.

Model.where(recipient_id: current_user.id) 
    .where(inbox_id: @inbox.id) 
    .where(status: 'unread') 
    .update_all("attr1='something_new'")