ActiveRecord não tem um meio interno de rotular uma coluna como somente leitura. A melhor maneira de contornar isso é configurar uma validação de atualização da seguinte forma:
validate :message_cannot_change, on: :update
def message_cannot_change
if self.message_changed?
errors.add(:message, "must not change")
end
end
Isso marcará a coluna “mensagem” como somente leitura. Obviamente, você pode alterar esse nome para qualquer nome de coluna que desejar.