Impedir atualizações em modelos Rails

Às vezes, você deseja ter um modelo específico para nunca mudar. Aqui estão suas opções, dependendo do que você precisa.

Para evitar qualquer atualização nos objetos, você simplesmente tem que substituir o readonly?método no modelo:

def readonly?
# allow the creation, you can also use a more complex condition to allow updates under certain conditions
new_record
? ? false : true
end

Se você também deseja evitar que o objeto seja destruído, adicione este retorno de chamada:

before_destroy { |record| raise ReadOnlyRecord }

Para evitar que apenas atributos individuais sejam modificados:

attr_readonly :name, :email, :price # ...and so on

Finalmente, se você quiser fazer uma associação retornar objetos somente leitura o tempo todo, basta adicionar a readonly: trueopção à associação:

belongs_to :parent, readonly: true
has_one
:friend, readonly: true
has_many
:siblings, readonly: true
has_and_belongs_to_many
:groups, readonly: true

Observe que se o (s) objeto (s) retornado (s) em si não implementou nenhuma das opções de somente leitura acima, não há como evitar que o desenvolvedor recupere uma instância gravável.

Fontes: