Rails 5.1 ปล่อยตอน RailsConf 2017 ฟีเจอร์ใหญ่: JS Integration, Encrypted Secrets, System Tests, form_with แทน form_for/form_tag แต่ ความสวยงามของ Rails อยู่ที่รายละเอียดเล็กๆ ที่ทำให้เขียนโค้ดวันละดีขึ้น
1. Tag Helpers ที่สอดคล้องกันมากขึ้น
เดิม: tag และ content_tag สับสน Parameter Order
<%= content_tag :p, @user.name, class: "name" %>
Rails 5.1: ใช้ tag.tagname โดยตรง
<%= tag.p @user.name, class: "name" %>
<%= tag.br %>
<%= tag.pea @user.name, class: "name" %>
✅ HTML5 Default, สร้าง Custom Element ได้, ไม่ต้องจด Parameter Order
2. assert_changes: ขยายจาก assert_difference
เดิม assert_difference เช็คเฉพาะตัวเลข (Count)
old_score = @user.score
@user.answer_question!(...)
assert_equal old_score + 10, @user.score
# กลายเป็น
assert_difference "@user.score", 10 do
@user.answer_question!(...)
end
Rails 5.1: assert_changes เช็คการเปลี่ยนแปลง Non-Numerical ได้
# String Change
assert_changes "users(:justin).name", from: "Justin", to: "Bob" do
@user.update_attributes(name: "Bob")
end
# Lambda Syntax
assert_changes -> { users(:justin).name }, from: "Justin", to: "Bob" do
@user.update_attributes(name: "Bob")
end
# Flexible Matcher (===)
assert_changes -> { users(:justin).updated_at }, to: ActiveSupport::TimeWithZone do
@user.update_attributes(name: "Bob")
end
3. delegate_missing_to: Forward ทุก Method
เดิม delegate ต้องระบุ Method ทีละตัว
class Player
delegate :id, :name, to: :@user
def initialize(user); @user = user; end
def points; Game.points_for_user(user.id); end
end
Rails 5.1: delegate_missing_to Forward ทุก Method ที่ไม่มีใน Class นี้
class Player
delegate_missing_to :@user
def initialize(user); @user = user; end
def points; Game.points_for_user(user.id); end
end
# Player.new(user).name → เรียก user.name อัตโนมัติ
4. Bonus: alias_method_chain หายไปแล้ว!
Ruby 2 มี Module#prepend แทน alias_method_chain ได้
Rails 5.1: alias_method_chain ถูกลบออก อย่างเป็นทางการ ใช้ prepend แทน
หา Feature เหล่านี้อย่างไร?
- อ่าน Changelogs
- ดู Pull Requests ที่น่าสนใจ
- ลองหา Feature ใหม่ๆ ที่ทำให้ชีวิตง่ายขึ้น
เจออะไรดีๆ อย่าเก็บตัว 來 แชร์ใน Comments ให้ทุกคนเรียนรู้ด้วย!