Ruby on Rails
मॉडल स्टेट्स: AASM
खोज…
AASM के साथ मूल राज्य
आमतौर पर आप ऐसे मॉडल बनाते हैं जिनमें एक राज्य होगा, और वह राज्य वस्तु के जीवनकाल के दौरान बदल जाएगा।
AASM एक परिमित राज्य मशीन एनबलर लाइब्रेरी है जो आपकी वस्तुओं की प्रक्रिया के डिजाइन के माध्यम से एक आसान से गुजरने से निपटने में आपकी सहायता कर सकती है।
आपके मॉडल में ऐसा कुछ होने से फैट मॉडल, स्किनी कंट्रोलर आइडिया, रेल्स बेस्ट प्रैक्टिस में से एक के साथ तालमेल हो जाता है। मॉडल अपने राज्य, इसके परिवर्तनों और उन परिवर्तनों से उत्पन्न होने वाली घटनाओं के प्रबंधन के लिए एकमात्र जिम्मेदार है।
जेमफाइल में स्थापित करने के लिए
gem 'aasm'
एक ऐप पर विचार करें जहां उपयोगकर्ता कीमत के लिए एक उत्पाद का उद्धरण करता है।
class Quote
include AASM
aasm do
state :requested, initial: true # User sees a product and requests a quote
state :priced # Seller sets the price
state :payed # Buyer pays the price
state :canceled # The buyer is not willing to pay the price
state :completed # The product has been delivered.
event :price do
transitions from: requested, to: :priced
end
event :pay do
transitions from: :priced, to: :payed, success: :set_payment_date
end
event :complete do
transitions from: :payed, to: :completed, guard: product_delivered?
end
event :cancel do
transitions from: [:requested, :priced], to: :canceled
transitions from: :payed, to: canceled, success: :reverse_charges
end
end
private
def set_payment_date
update payed_at: Time.zone.now
end
end
कोट्स वर्ग के राज्य आपकी प्रक्रिया के लिए सर्वोत्तम हो सकते हैं।
आप अतीत के रूप में राज्यों के बारे में सोच सकते हैं, जैसे पिछले उदाहरण में या दूसरे तनाव में अहंकार, उदाहरण के लिए: मूल्य निर्धारण, भुगतान, वितरण, आदि राज्यों का नामकरण आप पर निर्भर करता है। एक व्यक्तिगत दृष्टिकोण से, पिछले राज्य बेहतर काम करते हैं क्योंकि आपका अंतिम राज्य निश्चित रूप से एक अतीत की कार्रवाई होगी और घटना के नामों के साथ बेहतर लिंक करेगा, जिसे बाद में समझाया जाएगा।
नोट: सावधान रहें कि आप किन नामों का उपयोग करते हैं, आपको रूबी या रूबी आरक्षित खोजशब्दों पर उपयोग नहीं करने के बारे में चिंता करनी होगी, जैसे valid
, end
, being
, आदि।
राज्यों और बदलावों को परिभाषित करने के बाद, हम अब एएएसएम द्वारा बनाए गए कुछ तरीकों का उपयोग कर सकते हैं।
उदाहरण के लिए:
Quote.priced # Shows all Quotes with priced events
quote.priced? # Indicates if that specific quote has been priced
quote.price! # Triggers the event the would transition from requested to priced.
जैसा कि आप देख सकते हैं कि ईवेंट में संक्रमण है, यह परिवर्तन यह निर्धारित करता है कि ईवेंट कॉल पर स्थिति किस तरह बदल जाएगी। यदि वर्तमान स्थिति के कारण ईवेंट अमान्य है, तो एक त्रुटि उठाई जाएगी।
उदाहरण के लिए घटनाओं और बदलावों में कुछ अन्य कॉलबैक भी हैं
guard: product_delivered?
product_delivered?
कॉल करेंगे product_delivered?
विधि जो एक बूलियन वापस कर देगी। यदि यह गलत निकला, तो संक्रमण लागू नहीं किया जाएगा और यदि कोई अन्य परिवर्तन उपलब्ध नहीं हैं, तो स्थिति नहीं बदलेगी।
success: :reverse_charges
यदि वह अनुवाद सफलतापूर्वक होता है :reverse_charges
विधि को लागू किया जाएगा।
एएएसएम में प्रक्रिया में अधिक कॉलबैक के साथ कई अन्य तरीके हैं लेकिन इससे आपको परिमित राज्यों के साथ अपने पहले मॉडल बनाने में मदद मिलेगी।