http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunkのAASMを使用しています
私の例では、空手道場レールサイトがあります。このサイトでは、教師は指導するクラスを管理し、生徒を次の論理的なベルトに移動させることができます。
私の「学生」モデルはベルトの進行に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
...そしてTeacherモデルはこのように定義されています...
class Teacher < ActiveRecord::Base
def Promote_Student(pupil)
pupil.Graduate!
end
end
教師だけが「Student.Graduate!」と呼べるようにする方法はありますか?「:guard」コマンドを見たことがありますが、現在のオブジェクト(Student)をチェックする関数しか持てず、関数を呼び出したオブジェクト(Teacher)は持てないようです。
また、次のようなパラメータをイベントに追加できないようです...
event :Gradate(teacher_id) do
...
end
...これは理想的です。