Ruby 如何在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

在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
    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
  "