Eval() tanımlanmamış yöntemi, Rails 4.2 model payment_request
modelinde workflow
bloğunu değerlendirmek için kullanılır. Burada eval
kullanmadan önce workflow
blok:eval()
class PaymentRequest < ActiveRecord::Base
include Workflow
def self.load_wf
workflow do
state :initial_state do
event :submit, :transitions_to => :ceo_reviewing
end
state :ceo_reviewing do
event :reject, :transitions_to => :rejected
event :approve, :transitions_to => :approved
end
state :rejected
state :approved
end
end
..........
end
dize spec
değişken aşağıdaki gibi tanımlanır:
spec = "state :initial_state do
event :submit, :transitions_to => :ceo_reviewing
end
state :ceo_reviewing do
event :reject, :transitions_to => :rejected
event :approve, :transitions_to => :approved
end
state :rejected
state :approved"
ve yeniden:
class PaymentRequest < ActiveRecord::Base
include Workflow
def self.load_wf(spec)
eval("Workflow::ClassMethods.workflow {#{spec}}")
end
...............
end
eval
oluşturur hatası:
Güvenilir
module Workflow
module ClassMethods
attr_reader :workflow_spec
.....
def workflow(&specification)
assign_workflow Specification.new(Hash.new, &specification)
end
......
end
end
eval bağlanma eklemek ve işe yaramadı (emin değilim bağlayıcı doğru kullanıldığı takdirde):
workflow
bir taş bir yöntemdir.workflow
& yöntemini payment_request
modelinde nasıl uygularsınız?
Bu soruna yaklaştığım adım, düz kodlu ve herhangi bir "eval" olmaksızın, step1 # run 'load_wf '. Adım 1 sonra, sonra step2 # kodu ile değiştirmek "eval". Problem 'eval'ı tanıttıktan sonra adım 2'de gerçekleşir. 1. adımda' workflow' başarıyla çağrılır ve mixin problemini görmedim. Başka bir gönderide belirttiğiniz gibi “eval” ile bir kapsam (bağlama) olasılığının daha yüksek olduğunu düşünüyorum. Fakat bazı tanımlamalar dışında 'ciltleme' hakkında çok fazla çevrimiçi yok. – user938363
Yayınlamadan önce, example_eval', class_eval' denedim ve aynı hatayı döndürdüler. – user938363
Hatta var olup olmadığını görmek için örnek_eval ("self.methods.inspect") gibi bazı testler yapabilirsiniz. Olmalı! – tadman