AASM: проверка того, какой объект перемещает состояние вперед - PullRequest
0 голосов
/ 30 августа 2009

Я использую 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

... что было бы идеально.

1 Ответ

0 голосов
/ 30 августа 2009

Я думаю, что такого рода принуждение не требуется, если вы правильно написали код. Вы сами применяете это в коде.

Вы можете написать функцию, такую ​​как «Учитель # продвижение» (студент), а затем написать несколько комментариев о выпускном мероприятии, заявив, что не следует вызывать его напрямую, а вместо этого вызвать «Учитель # продвижение».

также camel_case, без заглавных букв, предпочтение отдается методам и символам.

...