我正在使用http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk
中的AASM在我的例子中,我有一个空手道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
有没有办法确保只有教师可以打电话给“Student.Graduate!”?我见过“:guard”命令,但似乎我只能检查当前对象(学生)的函数,而不是调用函数的对象(教师)。
我似乎无法在我的活动中添加一个参数,如...
event :Gradate(teacher_id) do
...
end
......这将是理想的。
答案 0 :(得分:0)
我认为只要您正确编码,就不需要这种强制执行。您可以在代码中自行执行此操作。
您可以编写一个函数,例如教师#province(学生),然后在毕业生活动上写一些评论,说明不要直接调用它,而是调用教师#provate而不是。
也是camel_case whitout首字母大写是方法和符号的首选。