Ich habe ein Kontenmodell, wo ich möchte balance
gelesen werden, aber es kann über private Methoden aktualisiert werden.Schienen: legen Sie ein Modellattribut als schreibgeschützt, aber ermöglichen die Aktualisierung über Methode
Derzeit
class Account < ActiveRecord::Base
def deposit(amount)
# do some stuff and then
update_balance(amount)
end
private
def update_balance(amount)
self.balance += amount
end
end
Dies ist jedoch immer noch möglich:
account = Account.first
account.balance += 5
account.save
I für die oben möchte einen Fehler geben, aber noch in der Lage sein zu tun:
account.balance #=> 0
account.deposit(5)
account.balance #=> 5
Gibt es ':: balance =' Methode von Account? Woher kommt? Das ist, weil "Account.balance + = amount" auf "Account.balance = Account.balance + amount" erweitert wurde. –
@ МалъСкрылевъ Ja, es gibt ein Kontostandsattribut, das hier nicht aufgeführt ist, da es in Rails ActiveRecord bereits festgelegt ist basierend auf dem Datenbankschema und sind bei der Definition des Modells nicht erforderlich. – amingilani
Ich sehe kein solches Attribut in Rails-Dokumenten, validiere dein Schema/Modell –