0

我正在使用来自http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk的 AASM

在我的示例中,我有一个 Karate dojo rails 站点。在该网站上,教师可以管理他们所教授的课程并将他们的学生转移到下一个逻辑带。

我的“学生”模型使用 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

有没有办法确保只有教师才能称呼“学生。毕业生!”?我见过“:guard”命令,但似乎我只能拥有检查当前对象(学生)的函数,而不是调用该函数的对象(教师)。

看来我无法向我的事件添加参数,例如......

event :Gradate(teacher_id) do
   ...
end

...这将是理想的。

4

1 回答 1

0

我认为只要您正确编码,就不需要这种强制措施。您自己在代码中强制执行此操作。

你可以写一个Teacher#promote(student)这样的函数,然后在graduate event上写一些注释,说明不直接调用它,而是调用Teacher#promote。

在方法和符号上,camel_case 首字母大写也是首选。

于 2009-08-30T16:06:46.373 回答