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

Rails 5.1 की खोज: मुख्य छिपी हुई विशेषताएं और सुधार

पिछले हफ्ते, RailsConf 2017 के दौरान, Rails 5.1 जारी हुआ।

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

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

अधिक सुसंगत टैग हेल्पर्स

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

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

Rails 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

Rails 5.1 में, assert_changes इसे एक कदम आगे ले जाता है।

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

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

सब कुछ डेलीगेट करें

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

class Player
  delegate :id, :name, to: :@user
  def initialize(user)
    @user = user
  end
  def points
    Game.points_for_user(user.id)
  end
end

लेकिन कभी-कभी आप उस क्लास को जिसे आप लपेट रहे हैं, सब कुछ फॉरवर्ड करना चाहते हैं।

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

class Player
  delegate_missing_to :@user
  def initialize(user)
    @user = user
  end
  def points
    Game.points_for_user(user.id)
  end
end

अब, Player क्लास में नहीं होने वाले किसी भी मेथड कॉल को @user पर खोजा जाएगा।

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

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

और Rails 5.1 तक, alias_method_chain अब आधिकारिक तौर पर चला गया है - prepend से प्रतिस्थापित।

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

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

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

  1. Android TV के लिए Android 11 के 10 सर्वश्रेष्ठ फीचर्स Android TV के लिए Android 11 के 10 सर्वश्रेष्ठ फीचर्स

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

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

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

  1. iOS 14 के 8 सर्वश्रेष्ठ नए फीचर iOS 14 के 8 सर्वश्रेष्ठ नए फीचर

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