SAMA: Verifica che oggetto si muove uno stato avanti
-
20-09-2019 - |
Domanda
Sto usando SAMA da http://elitists.textdriven.com/svn / plugins / acts_as_state_machine / trunk
Nel mio esempio, ho un sito rotaie Dojo Karate. Sul sito, gli insegnanti possono gestire le classi che istruiscono e spostare i loro studenti al successivo nastro logica.
Il mio "studente" modello uso AASM per la progressione della cinghia ed è definita in questo modo:
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
... e il modello di insegnante è definito come questo ...
class Teacher < ActiveRecord::Base
def Promote_Student(pupil)
pupil.Graduate!
end
end
C'è un modo garantire che solo insegnanti possono chiamare "Student.Graduate!"? Ho visto ": guardia". Comando, ma che sembra che io possa avere solo funzioni che controllano l'oggetto corrente (lo studente) e non l'oggetto, che hanno la funzione (il Maestro)
Sembra anche che non posso aggiungere un parametro al mio evento come ...
event :Gradate(teacher_id) do
...
end
... che sarebbe l'ideale.
Soluzione
Credo che questo tipo di applicazione non è necessario a condizione che si codifica correttamente. A far rispettare questo da soli nel codice.
È possibile scrivere una funzione come insegnante # promuovere (studente), e poi scrivere qualche commento sulla manifestazione laureato affermando di non chiamarlo direttamente, ma che chiedono Insegnante # promuovere invece.
anche camel_case whitout prima lettera capitalizzazione è preferito su metodi e simboli.