Frage

Meine Rechnung Modell verfügt über eine address_id Attribut, und ich will nicht, diese address_id FÜR IMMER ändern. Deshalb möchte ich nicht, dass dies außerhalb der Klasse geschehen:

invoice.address_id = 1
invoice.address = some_address

Die Schienen fügt automatisch diese address_id Attribut auf das Modell aus der Rechnungstabelle, so wie kann ich erklären, dieses Attribut private / geschützt? Der Aufruf

attr_protected :address_id

ist höchstwahrscheinlich die Lösung nicht, da auf der Grundlage der Dokumentation verhindert nur Massenzuweisungen.

Danke!

War es hilfreich?

Lösung

Sie wollen attr_readonly .

Andere Tipps

Nicht so schön wie ein Motto, sondern Code soll unten arbeiten (und man kann immer etwas metaprogramming tut eine ‚unveränderlich‘ Methode zu schreiben)

def address_id=(id)
  if new_record?
    write_attribute(:address_id, id)
  else
    raise 'address is immutable!'
  end
end 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top