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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top