Rails 7 อยู่ใกล้แค่เอื้อม เราไม่มีวันวางจำหน่ายที่ได้รับการยืนยัน แต่คาดว่าจะวางจำหน่ายก่อนวันคริสต์มาส ดังนั้นจึงอีกไม่นานนัก เวอร์ชันล่าสุด ณ วันที่เผยแพร่ของโพสต์นี้คือ 06 ซึ่งเป็นผู้สมัครรุ่นแรก Basecamp, HEY, Github และ Shopify ต่างใช้งาน Rails 7 alpha ในการผลิต ดังนั้นเราจึงคาดหวังได้ว่าแม้แต่ผู้สมัครที่จะเปิดตัวจะค่อนข้างเสถียร
ในโพสต์นี้ เราจะดูคุณสมบัติใหม่และการเปลี่ยนแปลงบางอย่างที่ Rails 7 จะนำมา
ไม่จำเป็นต้องใช้โหนดและ Webpack
ใช่แล้ว คุณอ่านถูกต้องแล้ว! JavaScript ใน Rails 7 จะไม่ต้องใช้ NodeJS หรือ Webpack อีกต่อไป และคุณยังสามารถใช้แพ็คเกจ npm ได้
การทรานสไพล์ ES6 ด้วย Babel และการรวมกับ Webpack จำเป็นต้องมีการตั้งค่าจำนวนมาก ในขณะที่ Rails สนับสนุนมันค่อนข้างดีด้วย 18 gem ซึ่งนำสัมภาระมามากมาย เป็นการยากที่จะเข้าใจและทำการเปลี่ยนแปลงใด ๆ โดยเฉพาะอย่างยิ่งในขณะที่ยังคงความสามารถในการอัปเกรดอยู่
ตอนนี้เป็นค่าเริ่มต้นสำหรับแอปใหม่ที่สร้างด้วย 25 คือการใช้แผนที่นำเข้าผ่าน 38 gem.แทนที่จะเขียน 46 และการติดตั้งการพึ่งพาด้วย 56 หรือ 61รหัส> คุณใช้ 79 CLI เพื่อปักหมุด (หรือเลิกปักหมุดหรืออัปเดต) การอ้างอิง
ตัวอย่างเช่น ในการติดตั้ง 88 :
สิ่งนี้จะเพิ่มบรรทัดใน 97 ชอบ:
ในโค้ด JavaScript ของคุณ คุณสามารถใช้ทุกอย่างต่อไปได้เหมือนเดิม:
สิ่งหนึ่งที่ควรคำนึงถึงในการตั้งค่านี้คือไม่มีการสลับระหว่างสิ่งที่คุณเขียนกับสิ่งที่เบราว์เซอร์ได้รับ โดยส่วนใหญ่ ก็ถือว่าใช้ได้ เนื่องจากเบราว์เซอร์ทั้งหมดที่สำคัญในขณะนี้รองรับ ES6 ทันที
แต่นี่ก็หมายความว่าคุณจะไม่สามารถใช้ TypeScript หรือ JSX ได้เนื่องจากต้องมีการแปลงเป็น JS ก่อนใช้งาน
ดังนั้น หากคุณต้องการใช้ React กับ JSX คุณยังคงต้องถอยกลับไปใช้การตั้งค่าอื่น (โดยใช้ webpack/rollup/esbuild)
Rails 7 สามารถทำสิ่งนี้เพื่อคุณได้ สิ่งที่คุณต้องมีคือคำสั่งเดียวสำหรับกลยุทธ์ที่คุณเลือก:
เทอร์โบลิงก์และ UJS แทนที่ด้วยเทอร์โบและกระตุ้น
แอปพลิเคชันที่สร้างด้วย Rails 7 จะได้รับ Turbo และ Stimulus (จาก Hotwire) เป็นค่าเริ่มต้น แทนที่จะเป็น Turbolinks และ UJS Hotwire เป็นแนวทางใหม่ที่มอบการอัปเดตที่รวดเร็วให้กับ DOM โดยการส่ง HTML ผ่านทางสาย
การเข้ารหัสที่ชั้นฐานข้อมูล
Rails 7 อนุญาตให้ทำเครื่องหมายฟิลด์ฐานข้อมูลบางฟิลด์ว่าเข้ารหัสโดยใช้ 101 วิธีการบน 110 . ซึ่งหมายความว่าหลังจากการตั้งค่าเริ่มต้น คุณสามารถเขียนโค้ดดังนี้:
คุณสามารถใช้แอตทริบิวต์ที่เข้ารหัสต่อไปได้เหมือนกับที่คุณใช้แอตทริบิวต์อื่นๆ Rails 7 จะเข้ารหัสและถอดรหัสโดยอัตโนมัติระหว่างฐานข้อมูลและแอปพลิเคชันของคุณ
แต่สิ่งนี้มาพร้อมกับการเล่นโวหารเล็กน้อย:คุณไม่สามารถสืบค้นฐานข้อมูลตามฟิลด์นั้นได้เว้นแต่คุณจะผ่าน 125 ตัวเลือกเป็น 139 วิธีการ โหมดที่กำหนดขึ้นมีความปลอดภัยน้อยกว่าโหมดที่ไม่ได้กำหนดไว้ตามค่าเริ่มต้น ดังนั้นให้ใช้เฉพาะกับแอตทริบิวต์ที่คุณต้องการค้นหาเท่านั้น
การสืบค้นแบบอะซิงโครนัส
ขณะนี้มี 144 วิธีการที่คุณสามารถใช้ได้เมื่อสืบค้นข้อมูลเพื่อดึงผลลัพธ์ในเบื้องหลัง นี่เป็นสิ่งสำคัญอย่างยิ่งเมื่อคุณต้องการโหลดแบบสอบถามที่ไม่เกี่ยวข้องหลายรายการจากการทำงานของคอนโทรลเลอร์ คุณสามารถเรียกใช้:
การดำเนินการนี้จะเริ่มการสืบค้นทั้งสองในเบื้องหลังพร้อมกัน ดังนั้น หากการค้นหาแต่ละครั้งใช้เวลา 200 มิลลิวินาที เวลาทั้งหมดที่ใช้ในการดึงข้อมูลจะอยู่ที่ ~200 มิลลิวินาที แทนที่จะเป็น 400 มิลลิวินาที หากดึงข้อมูลตามลำดับ
โหมด Zeitwerk สำหรับ Rails 7
นี่เป็นการเปลี่ยนแปลงครั้งใหญ่สำหรับแอปพลิเคชันรุ่นเก่าที่ยังคงใช้งานตัวโหลดแบบคลาสสิก แอปพลิเคชัน Rails 7 ทั้งหมดต้องใช้โหมด Zeitwerk แต่สวิตช์นั้นค่อนข้างง่าย ดูคู่มือการอัปเกรด Zeitwerk ฉบับเต็ม
การอัปเดต Rails 7 อื่นๆ
ลองงานใหม่ไม่จำกัดครั้ง
ขณะนี้ ActiveJob อนุญาตให้ส่งผ่าน 155 เป็น 164 พารามิเตอร์บน 176 . Rails จะพยายามทำงานต่อไปโดยไม่มีจำนวนครั้งสูงสุด
ตัวแปรที่มีชื่อ
ตอนนี้คุณสามารถตั้งชื่อตัวแปรใน 187 แทนที่จะระบุขนาดในทุกการเข้าถึง
แฮชเป็นแอตทริบิวต์ HTML
มี 190 ใหม่ วิธีการใช้ในมุมมองที่แปลแฮชเป็นแอตทริบิวต์ HTML:
จะผลิต
ทับทิม 204รหัส>
ค่าเริ่มต้นใหม่สำหรับการดีบักได้เปลี่ยนจาก 214 ไปที่ 226 อัญมณี
แทนที่จะเรียก 238 ตอนนี้คุณต้องโทรไปที่ 247 ในโค้ดเพื่อเข้าสู่เซสชันการดีบัก
ยืนยันบันทึกเดี่ยวด้วย 252
เมื่อสอบถามบันทึก คุณสามารถโทรไปที่ 265 ได้แล้ว หรือ 279 (แทนที่จะเป็น 283 หรือ 297 ) เมื่อคุณต้องการยืนยันว่าแบบสอบถามควรตรงกับระเบียนเดียวเท่านั้น
ตรวจสอบการมี/ไม่มีสมาคม
ตอนนี้เราสามารถใช้ 306 ได้แล้ว เพื่อตรวจสอบว่ามีการเชื่อมโยงอยู่ในบันทึกหรือไม่ แทนที่จะเข้าร่วมและตรวจสอบการมีอยู่ของรหัส
สตรีมไฟล์ที่สร้างจากการทำงานของคอนโทรลเลอร์
ตอนนี้คุณสามารถใช้ 314 ภายในการดำเนินการของคอนโทรลเลอร์เพื่อเริ่มการสตรีมไฟล์ที่กำลังสร้างขึ้นทันที
นี่เป็นการตอบกลับทันที (บางส่วน) แก่ผู้ใช้ เพื่อให้พวกเขารู้ว่ามีบางอย่างเกิดขึ้น และมีประโยชน์เพิ่มเติมหากคุณปรับใช้บน Heroku
เนื่องจากไฟล์จะเริ่มสตรีมทันที Heroku จะไม่ยุติการเชื่อมต่อ ซึ่งหมายความว่าคุณไม่จำเป็นต้องหันไปใช้งานพื้นหลังเพื่อสร้างไฟล์แบบครั้งเดียวที่ใช้เวลานานกว่า 30 วินาที
การอัพเกรดเป็น Rails 7
เช่นเดียวกับ Rails เวอร์ชันก่อนหน้า การอัพเกรดทำได้ง่าย แม้ว่าเราจะยังไม่มีคู่มือการอัปเกรดอย่างเป็นทางการ แต่ขั้นตอนจะยังคงเหมือนเดิม:
- เปลี่ยนหมายเลขเวอร์ชัน Rails ใน Gemfile (
320ณ วันที่เผยแพร่) และเรียกใช้331. - เรียกใช้
341. ปฏิบัติตาม CLI แบบโต้ตอบและเพิ่ม/แทนที่/แก้ไขไฟล์ตามต้องการ - ทำการทดสอบและยืนยันว่าทุกอย่างทำงานได้ตามที่คาดไว้
สรุป
คุณสามารถดูรายการการแก้ไขข้อบกพร่อง คุณลักษณะ และการเปลี่ยนแปลงทั้งหมดได้ในบันทึกประจำรุ่น Rails 7 สิ่งเหล่านี้ยังไม่ครอบคลุมในขณะนี้ แต่เราคาดว่าจะได้รับการอัปเดตเร็วๆ นี้
หากคุณยังคงใช้ Rails 6 หรือต่ำกว่า โปรดทราบว่าใน Rails 7 รุ่นสุดท้าย Rails 6.1 จะเข้าสู่โหมด "ปัญหาด้านความปลอดภัยเท่านั้น" และจะไม่ได้รับการแก้ไขข้อบกพร่องอีกต่อไป นอกจากนี้ยังจะทำเครื่องหมาย EOL สำหรับ Rails 5.2 ด้วย เนื่องจากจะไม่ได้รับการแก้ไขใดๆ อีกต่อไป
ขอให้สนุกกับการเขียนโค้ด!
ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว! ป>
พุลกิต โกยาล
Pulkit ผู้เขียนรับเชิญของเราเป็นวิศวกรและที่ปรึกษาอาวุโสด้านฟูลสแต็ค ในเวลาว่าง เขาเขียนเกี่ยวกับประสบการณ์ของเขาในบล็อก
บทความทั้งหมดโดย Pulkit Goyal