Pergunta

Estou usando AASM de http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk

No meu exemplo, tenho um local de karatê de dojo. No site, os professores podem gerenciar as aulas que instruem e transferem seus alunos para o próximo cinturão lógico.

Meu modelo de "aluno" usa aASM para progressão da correia e é definido assim:

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 o modelo do professor é definido assim ...

class Teacher < ActiveRecord::Base
   def Promote_Student(pupil)
      pupil.Graduate!
   end
end

Existe uma maneira de garantir que apenas os professores possam ligar para "estudante.gradue!"? Eu já vi o comando ": guarda", mas isso parece que só posso ter funções que verificam o objeto atual (o aluno) e não o objeto que chamou de função (o professor).

Parece também que não posso adicionar um param ao meu evento como ...

event :Gradate(teacher_id) do
   ...
end

... o que seria ideal.

Foi útil?

Solução

Eu acho que esse tipo de fiscalização não é necessário, desde que você code corretamente. Você aplica isso sozinho no código.

Você pode escrever uma função como o professor#Promover (aluno) e depois escrever alguns comentários no evento de pós -graduação afirmando não chamá -lo diretamente, mas ligar para o professor#promover.

Além disso, a capitalização da primeira carta camel_case é preferida em métodos e símbolos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top