AASM: Vérification de l'objet qui se déplace d'un état vers l'avant
-
20-09-2019 - |
Question
J'utilise AASM de http://elitists.textdriven.com/svn / plugins / acts_as_state_machine / trunk
Dans mon exemple, j'ai un site de rails dojo de karaté. Sur le site, les enseignants peuvent gérer les classes qu'ils instruisent et déplacer leurs élèves à la prochaine ceinture logique.
Mon modèle « Student » utilisation AASM pour la progression de la ceinture et il est défini comme ceci:
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
... et le modèle de l'enseignant est défini comme celui-ci ...
class Teacher < ActiveRecord::Base
def Promote_Student(pupil)
pupil.Graduate!
end
end
Est-il possible d'assurer que seuls les enseignants peuvent appeler « Student.Graduate! »? Je l'ai vu « : garde ». Commande, mais qui semble que je ne peux avoir des fonctions qui vérifient l'objet en cours (l'étudiant) et non l'objet qui a appelé la fonction (l'enseignant)
Il semble aussi que je ne peux pas ajouter un param à mon événement comme ...
event :Gradate(teacher_id) do
...
end
... ce qui serait idéal.
La solution
Je pense que ce genre d'application ne sont pas nécessaires à condition que vous le code correctement. VALOIR par vous-même dans le code.
Vous pouvez écrire une fonction telle que # Enseignant promouvoir (étudiant), puis écrire quelques commentaires sur l'événement de deuxième cycle en indiquant ne pas l'appeler directement, mais appeler des enseignants # promouvoir la place.
également camel_case whitout première capitalisation lettre est préférée sur les méthodes et les symboles.