À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: true
opçã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: