গত সপ্তাহে, RailsConf 2017 এর সময়, Rails 5.1 পাঠানো হয়েছে।
আপনি যদি ঘোষণাগুলি অনুসরণ করেন তবে আপনি বড় বৈশিষ্ট্যগুলি দেখেছেন:আধুনিক জাভাস্ক্রিপ্টের সাথে আরও ভাল একীকরণ, এনক্রিপ্ট করা গোপনীয়তা এবং সিস্টেম পরীক্ষা। এবং আমার ব্যক্তিগত প্রিয় আছে:অবশেষে form_for
এর অদ্ভুত কম্বো থেকে মুক্তি পাচ্ছেন এবং form_tag
, এবং এটিকে form_with
দিয়ে প্রতিস্থাপন করা হচ্ছে . আমি এটি চেষ্টা করার জন্য অপেক্ষা করতে পারি না।
কিন্তু আমি যে কারণে Rails পছন্দ করি তা বড় নতুন বৈশিষ্ট্য নয়। এটি সামান্য, ক্রমাগত উন্নতি৷৷ এটি সেই মানের-জীবনের পরিবর্তন যা আমি যখন Rails অ্যাপগুলি লিখছি তখন আমাকে আরও খুশি করে। এবং রেল 5.1 সেগুলি পূর্ণ৷
৷আরো সামঞ্জস্যপূর্ণ ট্যাগ সাহায্যকারী
আপনি কি রেলের ট্যাগ সাহায্যকারী ব্যবহার করেছেন, যেমন 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
অ-সংখ্যাসূচক পরিবর্তনগুলি পরীক্ষা করতে পারে, যেমন দুটি স্ট্রিংয়ের মধ্যে পরিবর্তন, বা শূন্য এবং অন্য কিছুর মধ্যে:
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
Rails 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
প্রতিস্থাপন করবে .
এবং Rails 5.1 অনুযায়ী, alias_method_chain
এখন আনুষ্ঠানিকভাবে চলে গেছে - প্রিপেন্ড দিয়ে প্রতিস্থাপিত হয়েছে৷৷
রেলের নতুন সংস্করণ সবসময়ই উত্তেজনাপূর্ণ। কিন্তু এটিই বিশদ বিবরণ যা রেলকে এর সৌন্দর্য দেয়। আপনি যে কোডটি প্রতিদিন লেখেন তার সাথে ছোট পরিবর্তনগুলি আপনাকে আরও খুশি করে৷
আপনি কিভাবে এই পরিবর্তনগুলি খুঁজে পান? চেঞ্জলগগুলিতে ডুব দিন। আকর্ষণীয় টান অনুরোধ কটাক্ষপাত. নতুন, ছোট, 5.1 বৈশিষ্ট্যগুলির মধ্যে কোনটি আপনার জীবনকে কিছুটা সহজ করে তুলবে তা দেখুন৷
৷এবং আপনি যখন কিছু দুর্দান্ত জিনিস খুঁজে পান, তখন তা নিজের কাছে রাখবেন না। এটি এখানে শেয়ার করুন, যাতে আমরা সবাই নতুন কিছু শিখতে পারি!