AASM:前方状態を移動されたオブジェクトの確認
-
20-09-2019 - |
質問
私は http://elitists.textdriven.com/svnからAASMを使用しています/プラグイン/ acts_as_state_machine /トランクの
私の例では、私は空手道場レールサイトを持っています。サイトでは、教師は、彼らが指示するクラスを管理することができますし、次の論理ベルトに学生を移動します。
私の「学生」モデルは、ベルトの進行のために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
の方法は、唯一の教師が呼び出すことができることを保証あり「Student.Graduateを!」? 「:ガード」コマンドを、それは私が唯一の現在のオブジェクト(学生)とない機能(先生)と呼ばれるオブジェクトを確認する機能を持つことができるようです。
私が見てきました。また、私は私のイベントにPARAMを追加することができないように見えるような...
event :Gradate(teacher_id) do
...
end
...理想的である。
解決
私は執行のこの種は、あなたが正しくコーディングすることを提供する必要はないと思います。あなたは、コード内で自分でこれを施行ます。
あなたは(学生)促進などティーチャー#として関数を記述して、それを直接呼び出すことがない旨の大学院のイベントにいくつかのコメントを書きますが、呼び出し元教師の#の代わりに促進することができます。
は、また、最初の文字を大文字にする方法及びシンボルに好ましいwhitout camel_case。
所属していません StackOverflow