PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Massenaktualisierung einer verknüpften Tabelle mit ActiveRecord update_all und Rails 4

Seit Chat.update_all fügt UPDATE chats SET... hinzu Die einzige Möglichkeit, die mir einfällt, bringt Rails dazu, ein Update mit einem Alias ​​durchzuführen (UPDATE chats AS c ) erfolgt durch die Verwendung von connection.update und eine SQL-Zeichenfolge:

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'
});

Nicht großartig, wenn Sie SQL-Fragmente vermeiden möchten, aber die Verwendung eines Joins wie in Ihrer Frage ist möglicherweise die einzige Möglichkeit, wenn Sie AREL verwenden möchten.