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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top