PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Mise à jour en bloc d'une table jointe avec ActiveRecord update_all et Rails 4

Depuis Chat.update_all ajoutera UPDATE chats SET... la seule façon que je peux penser d'obtenir des rails pour faire une mise à jour avec un alias (UPDATE chats AS c ) est en utilisant connection.update et une chaîne sql :

Chat.connection.update(Q%{
  UPDATE chats AS c 
  SET email = m.source_name
  FROM messages AS m
  WHERE c.id = m.chat_id 
    AND m.created_at >= '2014-10-10'
});

Pas génial si vous voulez éviter les fragments SQL, mais l'utilisation d'une jointure comme dans votre question peut être le seul moyen si vous voulez utiliser AREL.