PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Aggiornamento in blocco di una tabella unita con ActiveRecord update_all e Rails 4

Da Chat.update_all aggiungerà UPDATE chats SET... l'unico modo in cui mi viene in mente di ottenere Rails per eseguire un aggiornamento con un alias (UPDATE chats AS c ) utilizzando connection.update e una stringa 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'
});

Non eccezionale se vuoi evitare frammenti SQL, ma usare un join come nella tua domanda potrebbe essere l'unico modo se vuoi usare AREL.