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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top