문제

나는 aasm을 사용하고 있습니다 http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk

내 예에서는 가라테 도조 레일 사이트가 있습니다. 이 사이트에서 교사는 자신이 지시하는 수업을 관리하고 학생들을 다음 논리 벨트로 옮길 수 있습니다.

내 "학생"모델은 벨트 진행에 AAMS를 사용하며 다음과 같이 정의됩니다.

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

... 이상적입니다.

도움이 되었습니까?

해결책

당신이 올바르게 코드를 작성한다면 이런 종류의 집행이 필요하지 않다고 생각합니다. 당신은 코드에서 직접 이것을 시행합니다.

Teacher#Promote (학생)와 같은 기능을 작성한 다음 직접 전화하지 말고 교사#에게 전화를 걸어 대신 졸업생 이벤트에 대한 의견을 쓸 수 있습니다.

또한 Camel_case Whitout 첫 글자 대문자는 방법과 기호에서 선호됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top