PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Atualização em massa de uma tabela unida com ActiveRecord update_all e Rails 4


Desde Chat.update_all adicionará UPDATE chats SET... a única maneira que consigo pensar em fazer Rails fazer uma atualização com um alias (UPDATE chats AS c ) está usando connection.update e uma string 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'
});

Não é ótimo se você quiser evitar fragmentos SQL, mas usar uma junção como na sua pergunta pode ser a única maneira se você quiser usar o AREL.