Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रेल में कम-ज्ञात विशेषताएं 5.1

पिछले हफ्ते, RailsConf 2017 के दौरान, रेल 5.1 को शिप किया गया।

यदि आपने घोषणाओं का पालन किया है, तो आपने बड़ी विशेषताएं देखी हैं:आधुनिक जावास्क्रिप्ट के साथ बेहतर एकीकरण, एन्क्रिप्टेड रहस्य और सिस्टम परीक्षण। और मेरा निजी पसंदीदा है:आखिरकार form_for . के अजीब संयोजन से छुटकारा पाना और form_tag , और इसे form_with . से बदल दें . मैं इसे आजमाने के लिए और इंतजार नहीं कर सकता।

लेकिन मुझे रेल से प्यार करने का कारण बड़ी नई सुविधाएँ नहीं हैं। यह छोटे, निरंतर सुधार हैं। जब मैं रेल ऐप लिख रहा होता हूं तो यह जीवन की गुणवत्ता में बदलाव होता है जो मुझे खुश करता है। और रेल 5.1 उनमें से भरी हुई है।

अधिक संगत टैग सहायक

क्या आपने रेल के टैग सहायकों का उपयोग किया है, जैसे tag और content_tag ?

<%= content_tag :p, @user.name, class: "name" %>

रेल 5.1 एक नया टैग सहायक सिंटैक्स जोड़ता है।

कॉल का उपयोग करें जैसे tag.div या tag.br , और आप पैरामीटर क्रम के बारे में चिंता करना और दो अलग-अलग तरीकों से बाजीगरी करना बंद कर सकते हैं:

<%= tag.p @user.name, class: "name" %>
<%= tag.br %>

ये नए टैग सहायक डिफ़ॉल्ट रूप से HTML5 का समर्थन करते हैं, और यहां तक ​​कि आपको अपने स्वयं के तत्व बनाने देते हैं:

<%= tag.pea @user.name, class: "name" %> 
<!-- turns into <pea class="name">Justin Weiss</pea> -->

सिर्फ मतभेदों से ज्यादा जोर दें

मुझे पसंद है assert_difference . assert_difference से पहले , मैंने परीक्षणों में स्थानीय चरों की बाजीगरी करने में बहुत अधिक समय बिताया:

old_score = @user.score
@user.answer_question!(...)
assert_equal old_score + 10, @user.score

assert_difference . के साथ , यह बहुत स्पष्ट है कि आप क्या करने का प्रयास कर रहे हैं:

assert_difference "@user.score", 10 do
  @user.answer_question!(...)
end

रेल 5.1 में, assert_changes इसे एक कदम और आगे बढ़ाता है।

assert_difference केवल गिनती में परिवर्तन की जाँच करता है। लेकिन assert_changes गैर-संख्यात्मक परिवर्तनों की जांच कर सकते हैं, जैसे दो तारों के बीच परिवर्तन, या शून्य और कुछ और के बीच:

assert_changes "users(:justin).name", from: "Justin", to: "Bob" do
  @user.update_attributes(name: "Bob")
end

एक स्ट्रिंग के बजाय, आप इसे एक लैम्ब्डा दे सकते हैं:

assert_changes -> { users(:justin).name }, from: "Justin", to: "Bob" do
  @user.update_attributes(name: "Bob")
end

to: कुछ भी हो सकता है जो ===से तुलना करता है। यह अच्छा है जब आप कुछ जानते हैं मूल्य के बारे में, लेकिन यह नहीं जानते कि यह क्या है, विशेष रूप से:

assert_changes -> { users(:justin).updated_at }, to: ActiveSupport::TimeWithZone do
  @user.update_attributes(name: "Bob")
end

सब कुछ सौंपें

कुछ रेल कोड में, आपको delegate दिखाई देगा इस्तेमाल की गई विधि। प्रतिनिधिमंडल तब सहायक होता है जब आप किसी अन्य वर्ग से विरासत में मिले बिना व्यवहार को उसके शीर्ष पर जोड़ना चाहते हैं:

class Player
  delegate :id, :name, to: :@user

  def initalize(user)
    @user = user
  end
  
  def points
    Game.points_for_user(user.id)
  end
end

लेकिन कभी-कभी आप सब कुछ को अग्रेषित करना चाहते हैं जिस कक्षा में आप रैप कर रहे हैं।

रूबी के साथ ऐसा करने के कुछ तरीके हैं, method_missing . का उपयोग करके या SimpleDelegator . लेकिन delegate से बेहतर मिलान करने के लिए विधि, delegate_missing_to रेल 5.1 में जोड़ा गया था। यह वही करता है जो वह कहता है:

class Player
  delegate_missing_to :@user

  def initalize(user)
    @user = user
  end
  
  def points
    Game.points_for_user(user.id)
  end
end

अब, किसी भी विधि के लिए कोई भी कॉल जो प्लेयर क्लास में नहीं है, वह @user . पर खोजेगी इसके बजाय।

बोनस:alias_method_chain चला गया!

रूबी 2 में मेरी पसंदीदा विशेषताओं में से एक मॉड्यूल # प्रीपेन्ड है। मुझे यह बहुत पसंद आया, मैंने इसके बारे में एक पोस्ट लिखी। विशेष रूप से, मैं कैसे आशा करता था कि मॉड्यूल # प्रीपेन्ड अंततः alias_method_chain को प्रतिस्थापित कर देगा ।

और रेल 5.1 के अनुसार, alias_method_chain अब आधिकारिक रूप से चला गया है - प्रीपेन्ड के साथ बदल दिया गया है।

रेल के नए संस्करण हमेशा रोमांचक होते हैं। लेकिन यह विवरण है जो रेल को इसकी सुंदरता देता है। आपके द्वारा प्रतिदिन लिखे जाने वाले कोड के साथ छोटे-छोटे परिवर्तन जो आपको खुश करते हैं।

आप उन परिवर्तनों को कैसे ढूंढते हैं? चैंज में गोता लगाएँ। दिलचस्प पुल अनुरोधों पर एक नज़र डालें। देखें कि कौन सी नई, छोटी, 5.1 सुविधाएं आपके जीवन को इतना आसान बना देंगी।

और जब आपको कुछ अच्छी चीजें मिलें, तो उसे अपने तक ही सीमित न रखें। इसे यहां साझा करें, ताकि हम सब कुछ नया सीख सकें!


  1. Android TV के लिए Android 11 की 10 सर्वश्रेष्ठ विशेषताएं

    Google द्वारा स्मार्टफ़ोन के लिए Android 11 जारी करने की घोषणा के कुछ ही समय बाद, उसने Android TV के लिए भी नवीनतम OS अपडेट पेश किया। Android TV पर, Android 11 सुरक्षा बढ़ाने, एक बार की अनुमति, बेहतर मेमोरी प्रबंधन और अन्य नई सुविधाओं के साथ आता है जो कोर Android अपडेट के साथ संरेखित होती हैं। कंपन

  1. अपने iPhone का नाम कैसे बदलें

    जब आपके नेटवर्क पर कई डिवाइस हों तो क्या आपको अपने iPhone को पहचानना मुश्किल हो रहा है? सौभाग्य से, आप अपने iPhone का नाम किसी भी सूची में जल्दी और आसानी से ढूंढने के लिए बदल सकते हैं। Apple आपको iPhone नाम बदलने का एक आसान विकल्प प्रदान करता है, और निम्न चरण दिखाते हैं कि आप इसे कैसे करते हैं। आप

  1. iOS 14 की 8 बेहतरीन नई सुविधाएं

    आईओएस 14, सितंबर 2020 में जारी किया गया, जिसमें नई सुविधाएँ, होम स्क्रीन डिज़ाइन ओवरहाल और मौजूदा ऐप्स के अपडेट शामिल हैं। यदि आपके पास समर्थित iPhone है, तो हम आपको सभी बेहतरीन नई सुविधाएं और उनका लाभ उठाने का तरीका दिखाएंगे। क्या मेरा iPhone iOS 14 को सपोर्ट करता है? यदि आपका iPhone iOS 13 चला स