खोज…


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 विधि को लागू किया जाएगा।

एएएसएम में प्रक्रिया में अधिक कॉलबैक के साथ कई अन्य तरीके हैं लेकिन इससे आपको परिमित राज्यों के साथ अपने पहले मॉडल बनाने में मदद मिलेगी।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow