Come proteggere un attributo del modello Rails?
-
02-07-2019 - |
Domanda
Il mio modello di fattura ha un attributo address_id e non voglio che questo address_id cambi PER SEMPRE. Quindi non voglio che ciò accada al di fuori della classe:
invoice.address_id = 1
invoice.address = some_address
Rails aggiunge automaticamente questo attributo address_id al modello dalla tabella delle fatture, quindi come posso dichiarare questo attributo privato / protetto? Chiamata ??p>
attr_protected :address_id
molto probabilmente non è la soluzione poiché, sulla base della documentazione, impedisce solo assegnazioni di massa.
Grazie!
Soluzione
Desideri attr_readonly
.
Altri suggerimenti
Non carino come un solo liner, ma il codice qui sotto dovrebbe funzionare (e potresti sempre fare qualche metaprogrammazione per scrivere un metodo 'immutabile')
def address_id=(id)
if new_record?
write_attribute(:address_id, id)
else
raise 'address is immutable!'
end
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow