AASM:验证哪个对象向前移动的状态下
-
20-09-2019 - |
题
我使用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第一个字母大写优选上的方法和符号。
不隶属于 StackOverflow