AASM: Verifizieren Objekt, das bewegt einen Zustand nach vorn
-
20-09-2019 - |
Frage
Ich bin mit AASM von http://elitists.textdriven.com/svn / plugins / acts_as_state_machine / trunk
In meinem Beispiel habe ich ein Karate Dojo Website Schienen. Auf dem Gelände können die Lehrer die Klassen verwalten sie anweisen, und ihre Schüler auf die nächste logische Band bewegen.
Meine „Student“ -Modell Verwendung AASM für Band Progression und es ist wie folgt definiert:
class Student < ActiveRecord::Base
acts_as_state_machine :initial => :White_Belt
state :White_Belt
state :Yellow_Belt
state :Green_Belt
state :Purple_Belt
state :Brown_Belt
state :Black_Belt
event :Graduate do
transitions :from => :White_Belt, :to => :Yellow_Belt
...
transitions :from => :Brown_Belt, :to => :Black_Belt
end
end
... und das Lehrer-Modell ist wie folgt definiert ...
class Teacher < ActiveRecord::Base
def Promote_Student(pupil)
pupil.Graduate!
end
end
Gibt es eine Möglichkeit, dass nur Lehrer sicherstellen können, rufen „Student.Graduate!“? „: Wache“ Ich habe gesehen. Befehl, aber das scheint, dass ich nur Funktionen haben kann, die das aktuelle Objekt prüfen (der Student) und nicht das Objekt, das die Funktion (der Lehrer) genannt
Es scheint auch, dass ich nicht ein param meinem Fall wie ...
hinzufügenevent :Gradate(teacher_id) do
...
end
... das wäre ideal.
Lösung
Ich denke, diese Art der Durchsetzung ist nicht, dass Sie Code korrekt bereitgestellt notwendig. Sie erzwingen dies selbst in dem Code.
Sie können eine Funktion schreiben, wie Lehrer # fördern (Schüler), und schreiben Sie dann einige Kommentare auf der Diplom-Veranstaltung unter Angabe nicht direkt zu rufen, sondern ruft Lehrer # fördern statt.
auch whitout ersten Buchstaben Kapitalisierung camel_case auf Methoden und Symbole bevorzugt.