AASM : 상태를 앞으로 이동하는 객체 확인
-
20-09-2019 - |
문제
나는 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 첫 글자 대문자는 방법과 기호에서 선호됩니다.
제휴하지 않습니다 StackOverflow