5

मैं राज्य मशीन प्रदान करने के लिए http://github.com/geekq/workflow का उपयोग कर रहा हूं। मैं राज्य को बचाने के लिए ActiveRecord का उपयोग कर रहा हूं, जिसका अर्थ है कि मेरे पास मॉडल में "वर्कफ़्लो_स्टेट" विशेषता है। मुझे लगता है कि मैं राज्य मशीन में प्रत्येक घटना के लिए नामितस्कोप चाहता हूं, इसलिए मैं किसी दिए गए राज्य में सभी ऑब्जेक्ट्स पा सकता हूं। उदाहरण के लिए, एक बहुत ही सरल राज्य मशीन मानना:रेल वर्कफ़्लो जेम - मेटाप्रोग्रामिंग घटनाओं को नाम_स्कोप में?

workflow do 
    state :new do 
    event :time_passes, :transitions_to => :old 
    end 
    state :old do 
    event :death_arrives, :transitions_to => :dead 
    end 
    state :dead 
end 

मुझे प्रत्येक राज्य के लिए नामित स्कोप्स चाहिए। हालांकि, कि सूखी नहीं है ... मैं क्या साथ खत्म करना चाहते हैं की तरह कुछ है:

named_scope :new, :conditions => ['workflow_state = ?', 'new'] 
named_scope :old, :conditions => ['workflow_state = ?', 'old'] 
named_scope :dead, :conditions => ['workflow_state = ?', 'dead'] 

लेकिन कुछ पंक्तियां कि राज्यों की वर्तमान सूची पर निर्भर नहीं है के साथ।

मैं देख सकता हूं कि मॉडल # workflow_spec.states.keys मुझे प्रत्येक राज्य देता है। लेकिन मुझे लगता है कि मुझे जो चाहिए वह एक भयंकर लैम्ब्डा है जहां दायरे का नाम एक चर है। और मुझे नहीं पता कि यह कैसे करना है। बिलकुल। घंटों तक इस पर घूर रहे थे और आईआरबी के साथ खेल रहे थे, लेकिन मुझे लगता है कि मेटाप्रोग्रामिंग के बारे में ज्ञान का एक टुकड़ा है जो मेरे पास नहीं है। कृपया मदद करें!

लुकास, नीचे, इस सवाल का जवाब देता है - लेकिन हम भी एक स्ट्रिंग के लिए एक प्रतीक को बदलने की जरूरत:

workflow_spec.states.keys.each do |state| 
    named_scope state, :conditions => ['workflow_state = ?', state.to_s] 
    end 

उत्तर

3

अपने वर्ग शरीर की चोटी पर कुछ इस तरह का प्रयास करें

workflow_spec.states.keys.each do |state| 
    named_scope state, :conditions => ['workflow_state = ?', state] 
end 
+0

माइनर ट्वीक और कहा कि काम करने के लिए लगता है। और दृष्टि में एक लैम्ब्डा नहीं: workflow_spec.states.keys.each do | state | नाम_स्कोप स्थिति,: शर्तें => ['वर्कफ़्लो_स्टेट =?', State.to_s] अंत धन्यवाद! – JezC

0

कार्यक्षेत्र अब डिफ़ॉल्ट रूप से मणि द्वारा समर्थित हैं। राज्यों के नाम पर आधारित नामों के साथ अब यह स्वचालित रूप से उत्पन्न जोड़ता स्कोप:

class Order < ActiveRecord::Base 
    include Workflow 
    workflow do 
    state :approved 
    state :pending 
    state :clear 
    end 
end 

# returns all orders with `approved` state 
Order.with_approved_state 

# returns all orders with `pending` state 
Order.with_pending_state 

# returns all orders with `clear` state 
Order.with_clear_state 

स्रोत: https://github.com/geekq/workflow

संबंधित मुद्दे