我使用AASM从 http://elitists.textdriven.com/svn /插件/ 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

...这将是理想的。

有帮助吗?

解决方案

我认为这种执法不需要提供您正确编码。您可以通过自己在代码执行此操作。

您可以编写一个函数,如教师#促进(学生),然后写上研究生时的一些意见,说明没有直接调用它,但调用教师#改为推广

也camel_case whitout第一个字母大写优选上的方法和符号。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top