2016-04-14 58 views
0

我们将整个aasm块放入字符串中,并在payment_request模型中对其进行评估。这里是DEF:使用eval执行aasm块时出错

class PaymentRequest < :ActiveRecord::Base 
    include AASM 

    def self.load_wf_spec(wf_spec, wf_def_name) 
    eval("aasm(:#{wf_def_name}) :column => 'wf_state' {#{wf_spec}}") 
    end 
end 

错误是:

Failure/Error: eval("aasm(:#{wf_def_name}) :column => 'wf_state' {#{wf_spec}}") 

    SyntaxError: 
    (eval):1: syntax error, unexpected ':', expecting end-of-input 
    aasm(:test) :column => 'wf_state' {state :... 
       ^
    # ./app/models/payment_requestx/payment_request.rb:11:in `eval' 

下面是变量的值:

wf_def_name = 'test' 
    wf_spec = "state :initial_state, :initial => true 
     state :ceo_reviewing 
     state :approved 
     state :stamped 
     state :paid 
     state :rejected 
     event :submit_test do 
     transitions :from => :initial_state, :to => :ceo_reviewing 
     end 
     event :ceo_approve_test do 
     transitions :from => :ceo_reviewing, :to => :approved 
     end 
     event :ceo_reject_test do 
     transitions :from => :ceo_reviewing, :to => :rejected 
     end 
     event :ceo_rewind_test do 
     transitions :from => :ceo_reviewing, :to => :initial_state 
     end 
     event :stamp_test do 
     transitions :from => :approved, :to => :stamped 
     end 
     event :pay_test do 
     transitions :from => :stamped, :to => :paid 
     end" 

如果删除(:试验)”,则相同的错误指向下:

Failure/Error: eval("aasm :column => 'wf_state' {#{wf_spec}}") 

    SyntaxError: 
    (eval):1: syntax error, unexpected '{', expecting end-of-input 
    aasm :column => 'wf_state' {state :initial_state, :initial => true 
           ^
    # ./app/models/payment_requestx/payment_request.rb:11:in `eval' 

什么是缺少eval?谢谢。

回答

0

这里是它的工作原理:

eval("aasm(:#{wf_def_name}, :column => 'wf_state') {#{def_string}}")