Kể từ Chat.update_all
sẽ thêm UPDATE chats SET...
cách duy nhất mà tôi có thể nghĩ ra để thực hiện cập nhật bằng bí danh (UPDATE chats AS c
) bằng cách sử dụng connection.update
và một chuỗi 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'
});
Không tuyệt vời nếu bạn muốn tránh các đoạn SQL, nhưng sử dụng một phép nối như trong câu hỏi của bạn có thể là cách duy nhất nếu bạn muốn sử dụng AREL.