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

attr_protected :address_id

molto probabilmente non è la soluzione poiché, sulla base della documentazione, impedisce solo assegnazioni di massa.

Grazie!

È stato utile?

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
scroll top