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ügen
event :Gradate(teacher_id) do
   ...
end

... das wäre ideal.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top