Ruby 如何在rails 3.2模型中包含动态代码?
在rails 3.2应用程序中,我们希望在模型中保持工作流定义代码的动态性。以下是工作流定义代码:Ruby 如何在rails 3.2模型中包含动态代码?,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,在rails 3.2应用程序中,我们希望在模型中保持工作流定义代码的动态性。以下是工作流定义代码: include Workflow workflow do state :new do event :submit, :transitions_to => :being_reviewed end state :being_reviewed do event :approve, :transitions_to => :approved even
include Workflow
workflow do
state :new do
event :submit, :transitions_to => :being_reviewed
end
state :being_reviewed do
event :approve, :transitions_to => :approved
event :reject, :transitions_to => :rejected
end
state :approved
state :rejected
end
上面的代码作为存储在变量工作流\u pdef
中的字符串返回。我们的问题是如何使用eval(workflow\u pdef)
动态地在模型中包含上述代码 workflow\u pdef=:已批准
事件:拒绝,:转换到=>:拒绝
结束
国家:批准
国家:拒绝
结束
代码
#包含在每个实例中
甲级;结束
A.class\u评估工作流程\u pdef
#仅包含在实例“b”中
乙级;;结束
b=b.新的
b、 实例\u评估工作流\u pdef
以下是我们所做的:
include Workflow
Worflow do
eval(workflow_pdef)
end
那么工作流_pdef的字符串是:
workflow_pdef = "
state :new do
event :submit, :transitions_to => :being_reviewed
end
state :being_reviewed do
event :approve, :transitions_to => :approved
event :reject, :transitions_to => :rejected
end
state :approved
state :rejected
"
工作流定义的功能部分可能会变得动态。必须在模型中执行pdef字符串。您可以使用self.class
或self
替换类“a”或实例“b”,以便在当前模型上运行
workflow_pdef = "
state :new do
event :submit, :transitions_to => :being_reviewed
end
state :being_reviewed do
event :approve, :transitions_to => :approved
event :reject, :transitions_to => :rejected
end
state :approved
state :rejected
"