Colunas ActiveRecord somente leitura

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.