Я использую AASM от http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk
В моем примере у меня есть сайт по рельсам каратэ додзё. На сайте учителя могут управлять классами, которые они преподают, и перемещать своих учеников в следующий логический пояс.
Моя модель "Студент" использует AASM для прогрессирования пояса, и это определяется так:
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
... и модель Учителя определяется следующим образом ...
class Teacher < ActiveRecord::Base
def Promote_Student(pupil)
pupil.Graduate!
end
end
Есть ли способ обеспечить, чтобы только Учителя могли звонить "Студент. Выпускник!"? Я видел команду «: guard», но, похоже, у меня могут быть только функции, проверяющие текущий объект (Студент), но не объект, вызвавший функцию (Учитель).
Также кажется, что я не могу добавить параметр к своему событию, как ...
event :Gradate(teacher_id) do
...
end
... что было бы идеально.