Sinds Chat.update_all
zal UPDATE chats SET...
de enige manier die ik kan bedenken om rails een update te laten doen met een alias (UPDATE chats AS c
) is met behulp van connection.update
en een sql-tekenreeks:
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'
});
Niet geweldig als je SQL-fragmenten wilt vermijden, maar het gebruik van een a join zoals in je vraag is misschien de enige manier als je AREL wilt gebruiken.