2009-08-30 6 views
0

を状態に動いているオブジェクトが、私は空手道場レールサイトを持っています。このサイトでは教師が指導するクラスを管理し、生徒を次の論理的なベルトに移動させることができます。AASM:確認私は私の例では<a href="http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk" rel="nofollow noreferrer">http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk</a></p> <p>から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 

...と教師モデルは、次のように定義されている...

class Teacher < ActiveRecord::Base 
    def Promote_Student(pupil) 
     pupil.Graduate! 
    end 
end 

があります教師だけが「Student.Graduate!」と呼ぶことができる方法を保証しますか?私は ":guard"コマンドを見たことがありますが、私は現在のオブジェクト(Student)をチェックする機能しか持たず、関数を呼び出したオブジェクト(Teacher)しかチェックできないようです。理想的である

event :Gradate(teacher_id) do 
    ... 
end 

それはまた、私は私のようなイベントにPARAMを追加することができないことが表示されます

... ...。

答えて

0

コードを正しく記述すれば、このような強制は不要です。あなたはコードでこれを強制します。

Teacher#promote(student)のような関数を記述して、大学院イベントに直接呼び出さず、代わりにTeacher#promoteを呼び出すというコメントを書くことができます。

また、camel_case whitoutの最初の大文字小文字は、メソッドやシンボルで優先されます。

+0

コメントはありますが、コメントでは何も保証されません。もう少し具体的なものを提供したいと思っています。あなたの提案をありがとう。 – Abel

関連する問題

 関連する問題