AASM: Verificación de qué objeto se está moviendo hacia adelante un estado
-
20-09-2019 - |
Pregunta
Estoy usando AASM de http://elitists.textdriven.com/svn / plugins / acts_as_state_machine / tronco
En mi ejemplo, tengo un sitio rieles dojo de Karate. En el sitio, los profesores pueden gestionar las clases que enseñan a sus alumnos y mover a la siguiente cinta lógico.
Mi "estudiante" modelo de uso AASM para la progresión de la correa y se define así:
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
... y el modelo maestro se define como esto ...
class Teacher < ActiveRecord::Base
def Promote_Student(pupil)
pupil.Graduate!
end
end
¿Hay una manera de asegurar que sólo los profesores pueden llamar "Student.Graduate!"? He visto ": guardia". Mando, pero que parece que sólo puedo tener funciones que comprueban el objeto actual (el estudiante) y no el objeto que llamó a la función (el Maestro)
También parece que no puedo añadir un parámetro al evento como ...
event :Gradate(teacher_id) do
...
end
... que sería ideal.
Solución
Creo que este tipo de ejecución no es necesaria siempre que se codifican correctamente. Hacer cumplir esto por sí mismo en el código.
Se puede escribir una función como maestro # promover (estudiante), y luego escribir algunos comentarios sobre el evento graduada que indica no llamarlo directamente, sino que llaman Maestros # promover en su lugar.
también camel_case whitout se prefiere primero capitalización carta sobre los métodos y símbolos.