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