पिछले हफ्ते, 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 सुविधाएं आपके जीवन को इतना आसान बना देंगी।
और जब आपको कुछ अच्छी चीजें मिलें, तो उसे अपने तक ही सीमित न रखें। इसे यहां साझा करें, ताकि हम सब कुछ नया सीख सकें!