0

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

...これは理想的です。

4

1 に答える 1

0

正しくコーディングすれば、この種の強制は必要ないと思います。これは、コードで自分で強制します。

Teacher#promote(student)などの関数を記述してから、卒業イベントに直接呼び出すのではなく、代わりにTeacher#promoteを呼び出すというコメントを書くことができます。

また、メソッドと記号では、最初の文字を大文字にすることなく、camel_caseを使用することをお勧めします。

于 2009-08-30T16:06:46.373 に答える