edge
เพิ่มเติมที่ rubyonrails.org: เพิ่มเติมเกี่ยวกับ Ruby on Rails

เรื่องเด่นใน Rails 6.0:

เอกสารเวอร์ชันนี้ครอบคลุมเฉพาะการเปลี่ยนแปลงที่สำคัญเท่านั้น หากต้องการเรียนรู้เกี่ยวกับการแก้ไขข้อบกพร่องและการเปลี่ยนแปลงต่าง ๆ โปรดอ้างอิงที่เอกสารเปลี่ยนแปลงหรือตรวจสอบ รายการของการเปลี่ยนแปลง ในเก็บข้อมูลหลักของ Rails ใน GitHub

Chapters

  1. การอัปเกรดไปยัง Rails 6.0
  2. คุณสมบัติหลัก
  3. เครื่องมือทดสอบ Action Cable
  4. Railties
  5. Action Cable
  6. Action Pack
  7. Action View
  8. Action Mailer
  9. Active Record
  10. Active Storage
  11. Active Model
  12. Active Job
  13. Ruby on Rails Guides

1 การอัปเกรดไปยัง Rails 6.0

หากคุณกำลังอัปเกรดแอปพลิเคชันที่มีอยู่อยู่ ควรมีการทดสอบที่ดีก่อนที่จะเริ่มต้น คุณควรอัปเกรดเป็น Rails 5.2 ก่อนหากคุณยังไม่ได้ทำ และตรวจสอบให้แน่ใจว่าแอปพลิเคชันของคุณยังทำงานตามที่คาดหวังก่อนที่จะพยายามอัปเดตเป็น Rails 6.0 มีรายการสิ่งที่ควรระมัดระวังเมื่ออัปเกรดใน การอัปเกรด Ruby on Rails คู่มือ

2 คุณสมบัติหลัก

2.1 Action Mailbox

Pull Request

Action Mailbox ช่วยให้คุณสามารถเส้นทางอีเมลที่เข้ามาไปยังกล่องจดหมายที่คล้ายกับคอนโทรลเลอร์ได้ คุณสามารถอ่านข้อมูลเพิ่มเติมเกี่ยวกับ Action Mailbox ในคู่มือ Action Mailbox Basics

2.2 Action Text

Pull Request

Action Text นำเนื้อหาและการแก้ไขข้อความที่มีรูปแบบสู่ Rails มาให้ มันรวม ตัวแก้ไข Trix ที่จัดการทุกอย่างตั้งแต่การจัดรูปแบบ ไปยังการเชื่อมโยงไปยังการอ้างอิงไปยังรายการไปยังรูปภาพและแกลเลอรี่ที่ฝังอยู่ เนื้อหาข้อความที่มีรูปแบบที่สร้างขึ้นโดยตัวแก้ไข Trix จะถูกบันทึกในตัวของตัวเอง โมเดล RichText ที่เชื่อมโยงกับแอปพลิเคชัน Active Record ที่มีอยู่ รูปภาพที่ฝังอยู่ (หรือไฟล์แนบอื่น ๆ) จะถูกเก็บอัตโนมัติโดยใช้ Active Storage และเชื่อมโยงกับตัวแก้ไข RichText ที่รวมอยู่

คุณสามารถอ่านข้อมูลเพิ่มเติมเกี่ยวกับ Action Text ในคู่มือ Action Text Overview

2.3 Parallel Testing

Pull Request

การทดสอบแบบขนาน ช่วยให้คุณสามารถทดสอบแบบขนานได้ ชุดทดสอบของคุณ ในขณะที่การสร้างกระบวนการคือวิธีเริ่มต้น การใช้เธรดเป็นวิธีที่สนับสนุนด้วย การเรียกใช้การทดสอบแบบขนานลดเวลาที่ใช้ ชุดทดสอบทั้งหมดของคุณในการทดสอบ

2.4 Action Cable Testing

Pull Request

3 เครื่องมือทดสอบ Action Cable

เครื่องมือทดสอบ Action Cable ช่วยให้คุณสามารถทดสอบฟังก์ชัน Action Cable ของคุณได้ที่ระดับใดก็ได้: การเชื่อมต่อ (connections), ช่อง (channels), การกระจาย (broadcasts).

4 Railties

โปรดอ้างอิงที่ Changelog สำหรับการเปลี่ยนแปลงที่ละเอียด.

4.1 การลบ

  • ลบ after_bundle helper ที่ถูกเลิกใช้ภายในเทมเพลตของปลั๊กอิน (Commit)

  • ลบการสนับสนุนที่ถูกเลิกใช้สำหรับ config.ru ที่ใช้คลาสแอปพลิเคชันเป็นอาร์กิวเมนต์ของ run (Commit)

  • ลบอาร์กิวเมนต์ environment ที่ถูกเลิกใช้จากคำสั่ง rails (Commit)

  • ลบเมธอด capify! ที่ถูกเลิกใช้ใน generators และเทมเพลต (Commit)

  • ลบ config.secret_token ที่ถูกเลิกใช้ (Commit)

4.2 การเลิกใช้

  • เลิกใช้การส่งชื่อเซิร์ฟเวอร์ Rack เป็นอาร์กิวเมนต์ปกติให้กับ rails server (Pull Request)

  • เลิกใช้การสนับสนุนในการใช้ HOST environment เพื่อระบุ IP เซิร์ฟเวอร์ (Pull Request)

  • เลิกใช้การเข้าถึง hashes ที่ส่งกลับจาก config_for ด้วยคีย์ที่ไม่ใช่สัญลักษณ์ (Pull Request)

4.3 การเปลี่ยนแปลงที่สำคัญ

  • เพิ่มตัวเลือกชื่อ --using หรือ -u เพื่อระบุเซิร์ฟเวอร์สำหรับคำสั่ง rails server (Pull Request)

  • เพิ่มความสามารถในการดูผลลัพธ์ของ rails routes ในรูปแบบที่ขยายออก (Pull Request)

  • รันงานฐานข้อมูล seed โดยใช้ inline Active Job adapter (Pull Request)

  • เพิ่มคำสั่ง rails db:system:change เพื่อเปลี่ยนฐานข้อมูลของแอปพลิเคชัน (Pull Request)

  • เพิ่มคำสั่ง rails test:channels เพื่อทดสอบเฉพาะช่อง Action Cable เท่านั้น (Pull Request)

  • นำเสนอการป้องกันการโจมตี DNS rebinding (Pull Request)

  • เพิ่มความสามารถในการยกเลิกเมื่อเกิดข้อผิดพลาดในขณะที่รันคำสั่ง generator (Pull Request)

  • ทำให้ Webpacker เป็นคอมไพเลอร์ JavaScript เริ่มต้นสำหรับ Rails 6 (Pull Request)

  • เพิ่มการสนับสนุนฐานข้อมูลหลายระบบสำหรับคำสั่ง rails db:migrate:status (Pull Request)

  • เพิ่มความสามารถในการใช้เส้นทางการโยกย้ายที่แตกต่างกันจากฐานข้อมูลหลายระบบใน generators (Pull Request)

  • เพิ่มการสนับสนุนสำหรับข้อมูลรับรองแบบหลายสภาพแวดล้อม (Pull Request)

  • กำหนด null_store เป็นค่าเริ่มต้นของร้านค้าแคชในสภาพแวดล้อมการทดสอบ (Pull Request)

5 Action Cable

โปรดอ้างอิงที่ Changelog สำหรับการเปลี่ยนแปลงที่ละเอียด.

5.1 การลบ

  • แทนที่ ActionCable.startDebugging() และ ActionCable.stopDebugging() ด้วย ActionCable.logger.enabled (Pull Request)

    การเลิกใช้งาน

  • ไม่มีการเลิกใช้งานสำหรับ Action Cable ใน Rails 6.0

5.2 การเปลี่ยนแปลงที่สำคัญ

  • เพิ่มการสนับสนุนตัวเลือก channel_prefix สำหรับ PostgreSQL subscription adapters ใน cable.yml (Pull Request)

  • อนุญาตให้ส่งค่าการกำหนดค่าที่กำหนดเองไปยัง ActionCable::Server::Base (Pull Request)

  • เพิ่ม :action_cable_connection และ :action_cable_channel load hooks (Pull Request)

  • เพิ่ม Channel::Base#broadcast_to และ Channel::Base.broadcasting_for (Pull Request)

  • ปิดการเชื่อมต่อเมื่อเรียกใช้ reject_unauthorized_connection จาก ActionCable::Connection (Pull Request)

  • แปลงแพ็คเกจ Action Cable JavaScript จาก CoffeeScript เป็น ES2015 และเผยแพร่รหัสต้นฉบับในการกระจายของ npm (Pull Request)

  • ย้ายการกำหนดค่าของ WebSocket adapter และ logger adapter จากคุณสมบัติของ ActionCable เป็น ActionCable.adapters (Pull Request)

  • เพิ่มตัวเลือก id ให้กับ Redis adapter เพื่อแยกการเชื่อมต่อ Redis ของ Action Cable (Pull Request)

6 Action Pack

โปรดอ้างอิงที่ Changelog สำหรับการเปลี่ยนแปลงที่ละเอียด

6.1 การลบ

  • เอา fragment_cache_key helper ที่เลิกใช้งานออกและใช้ combined_fragment_cache_key แทน (Commit)

  • เอาเมธอดที่เลิกใช้งานใน ActionDispatch::TestResponse ออก: #success? แทนด้วย #successful?, #missing? แทนด้วย #not_found?, #error? แทนด้วย #server_error? (Commit)

6.2 การเลิกใช้งาน

  • เลิกใช้งาน ActionDispatch::Http::ParameterFilter และใช้ ActiveSupport::ParameterFilter แทน (Pull Request)

  • เลิกใช้งาน force_ssl ระดับคอนโทรลเลอร์และใช้ config.force_ssl แทน (Pull Request)

6.3 การเปลี่ยนแปลงที่สำคัญ

  • เปลี่ยน ActionDispatch::Response#content_type ให้ส่งค่าเฮดเดอร์ Content-Type ตามที่กำหนด (Pull Request)

  • สร้าง ArgumentError หากพารามิเตอร์ของทรัพยากรมีเครื่องหมายโคลอน (Pull Request)

  • อนุญาตให้เรียกใช้ ActionDispatch::SystemTestCase.driven_by พร้อมกับบล็อกเพื่อกำหนดความสามารถของเบราว์เซอร์เฉพาะ (Pull Request)

  • เพิ่ม middleware ActionDispatch::HostAuthorization เพื่อป้องกันการโจมตี DNS rebinding (Pull Request)

  • อนุญาตให้ใช้ parsed_body ใน ActionController::TestCase (Pull Request)

  • สร้าง ArgumentError เมื่อมีเส้นทางรูทหลายเส้นในบริบทเดียวโดยไม่ระบุชื่อ as: (Pull Request)

  • อนุญาตให้ใช้ #rescue_from ในการจัดการข้อผิดพลาดการแยกวิเคราะห์พารามิเตอร์ (Pull Request)

  • เพิ่ม ActionController::Parameters#each_value เพื่อทำการวนซ้ำผ่านพารามิเตอร์ (Pull Request)

  • เข้ารหัสชื่อไฟล์ Content-Disposition ใน send_data และ send_file (Pull Request)

  • เปิดเผย ActionController::Parameters#each_key. (Pull Request)

  • เพิ่มข้อมูลเชิงวัตถุและวันหมดอายุในคุกกี้ที่เข้ารหัสเพื่อป้องกันการคัดลอกค่าของคุกกี้ไปยังคุกกี้อื่น (Pull Request)

  • เรียก ActionController::RespondToMismatchError เมื่อมีการเรียกใช้ respond_to ที่ขัดแย้งกัน (Pull Request)

  • เพิ่มหน้าข้อผิดพลาดเฉพาะสำหรับกรณีที่ไม่มีเทมเพลตสำหรับรูปแบบคำขอ (Pull Request)

  • นำเข้า ActionDispatch::DebugExceptions.register_interceptor เป็นวิธีการเชื่อมต่อกับ DebugExceptions และประมวลผลข้อยกเว้นก่อนที่จะถูกแสดง (Pull Request)

  • แสดงเฉพาะหนึ่งค่าของหัวข้อ Content-Security-Policy nonce ต่อคำขอ (Pull Request)

  • เพิ่มโมดูลเฉพาะสำหรับการกำหนดค่าส่วนหัวเริ่มต้นของ Rails ที่สามารถรวมเข้ากับคอนโทรลเลอร์ได้อย่างชัดเจน (Pull Request)

  • เพิ่ม #dig ใน ActionDispatch::Request::Session. (Pull Request)

7 Action View

โปรดอ้างอิงที่ Changelog สำหรับการเปลี่ยนแปลงที่ละเอียด

7.1 การลบ

  • ลบตัวช่วย image_alt ที่ถูกยกเลิก (Commit)

  • ลบโมดูล RecordTagHelper ที่ว่างเปล่าซึ่งฟังก์ชันการทำงาน ถูกย้ายไปยังแพ็กเกจ record_tag_helper แล้ว (Commit)

7.2 การเลิกใช้

  • เลิกใช้ ActionView::Template.finalize_compiled_template_methods โดยไม่มีการแทนที่ (Pull Request)

  • เลิกใช้ config.action_view.finalize_compiled_template_methods โดยไม่มีการแทนที่ (Pull Request)

  • เลิกใช้การเรียกเมธอดของโมเดลที่เป็นส่วนตัวจากตัวช่วยการแสดงผล options_from_collection_for_select (Pull Request)

7.3 การเปลี่ยนแปลงที่สำคัญ

  • เคลียร์แคช Action View เฉพาะในโหมดการพัฒนาเมื่อมีการเปลี่ยนแปลงในไฟล์ เพื่อเพิ่มความเร็วในโหมดการพัฒนา (Pull Request)

  • ย้ายแพ็กเกจทั้งหมดของ Rails npm เข้าไปในขอบเขต @rails (Pull Request)

  • ยอมรับเฉพาะรูปแบบจากชนิด MIME ที่ลงทะเบียนเท่านั้น (Pull Request, Pull Request)

  • เพิ่มการจัดสรรในการแสดงเทมเพลตและพาร์ทเชียลในเซิร์ฟเวอร์ (Pull Request)

  • เพิ่มตัวเลือก year_format ในแท็ก date_select เพื่อปรับแต่งชื่อปี (Pull Request)

  • เพิ่มตัวเลือก nonce: true สำหรับตัวช่วย javascript_include_tag เพื่อรองรับการสร้าง nonce อัตโนมัติสำหรับ Content Security Policy (Pull Request)

  • เพิ่มการกำหนดค่า action_view.finalize_compiled_template_methods เพื่อปิดหรือเปิดใช้งาน finalizer ของ ActionView::Template (Pull Request)

  • แยกการเรียก confirm ของ JavaScript เป็นเมธอดที่สามารถแก้ไขได้เองใน rails_ujs (Pull Request)

  • เพิ่มตัวเลือกการกำหนดค่า action_controller.default_enforce_utf8 เพื่อใช้ในการบังคับให้ใช้การเข้ารหัส UTF-8 ค่าเริ่มต้นคือ false (Pull Request)

  • เพิ่มการสนับสนุนรูปแบบคีย์ I18n สำหรับคีย์ locale ในแท็ก submit (Pull Request)

8 Action Mailer

โปรดอ้างอิง Changelog สำหรับรายละเอียดการเปลี่ยนแปลง

8.1 การลบ

8.2 การเลิกใช้

  • เลิกใช้ ActionMailer::Base.receive และแนะนำให้ใช้ Action Mailbox แทน (Commit)

  • เลิกใช้ DeliveryJob และ Parameterized::DeliveryJob และแนะนำให้ใช้ MailDeliveryJob แทน (Pull Request)

8.3 การเปลี่ยนแปลงที่สำคัญ

  • เพิ่ม MailDeliveryJob เพื่อใช้ในการส่งอีเมลทั้งแบบธรรมดาและแบบพารามิเตอร์ (Pull Request)

  • อนุญาตให้งานส่งอีเมลที่กำหนดเองสามารถทำงานร่วมกับการตรวจสอบข้อกำหนดของ Action Mailer (Pull Request)

  • อนุญาตให้ระบุชื่อเทมเพลตสำหรับอีเมลแบบหลายส่วนด้วยบล็อกแทนการใช้เพียงชื่อแอ็กชันเท่านั้น (Pull Request)

  • เพิ่ม perform_deliveries เข้าไปใน payload ของการแจ้งเตือน deliver.action_mailer (Pull Request)

  • ปรับปรุงข้อความบันทึกเมื่อ perform_deliveries เป็น false เพื่อแสดงว่าการส่งอีเมลถูกข้ามไป (Pull Request)

  • อนุญาตให้เรียกใช้ assert_enqueued_email_with โดยไม่ต้องใช้บล็อก (Pull Request)

  • ดำเนินการส่งงานส่งอีเมลที่อยู่ในคิวในบล็อก assert_emails (Pull Request)

  • อนุญาตให้ ActionMailer::Base ยกเลิกการลงทะเบียน observers และ interceptors (Pull Request)

9 Active Record

โปรดอ้างอิง Changelog สำหรับรายละเอียดการเปลี่ยนแปลง

9.1 การลบ

  • ลบ #set_state ที่ถูกเลิกใช้จากออบเจกต์ transaction (Commit)

  • ลบ #supports_statement_cache? ที่ถูกเลิกใช้จากอะแดปเตอร์ฐานข้อมูล (Commit)

  • ลบ #insert_fixtures ที่ถูกเลิกใช้จากอะแดปเตอร์ฐานข้อมูล (Commit)

  • ลบ ActiveRecord::ConnectionAdapters::SQLite3Adapter#valid_alter_table_type? ที่ถูกเลิกใช้ (Commit)

  • ลบการสนับสนุนในการส่งชื่อคอลัมน์ไปยัง sum เมื่อมีการส่งบล็อก (Commit)

  • ลบการสนับสนุนในการส่งชื่อคอลัมน์ไปยัง count เมื่อมีการส่งบล็อก (Commit)

  • ลบการสนับสนุนในการเลือกวิธีที่ขาดหายไปในความสัมพันธ์ไปยัง Arel (Commit)

  • ลบการสนับสนุนในการเลือกวิธีที่ขาดหายไปในความสัมพันธ์ไปยังเมธอดเอกสารส่วนตัวของคลาส (Commit)

  • ลบการสนับสนุนในการระบุชื่อ timestamp สำหรับ #cache_key (Commit)

  • ลบ ActiveRecord::Migrator.migrations_path= ที่ถูกเลิกใช้ (Commit)

  • ลบ expand_hash_conditions_for_aggregates ที่ถูกยกเลิกแล้ว (Commit)

9.2 การยกเลิก

  • ยกเลิกการใช้เปรียบเทียบการจัดเรียงตามตัวอักษรที่ไม่ตรงกันสำหรับตัวตรวจสอบความเอกลักษณ์ (Commit)

  • ยกเลิกการใช้เมธอดการค้นหาระดับคลาสหากขอบเขตของผู้รับมีการรั่วไหล (Pull Request)

  • ยกเลิก config.active_record.sqlite3.represent_boolean_as_integer (Commit)

  • ยกเลิกการส่ง migrations_paths ไปยัง connection.assume_migrated_upto_version (Commit)

  • ยกเลิก ActiveRecord::Result#to_hash เพื่อใช้แทน ActiveRecord::Result#to_a (Commit)

  • ยกเลิกเมธอดใน DatabaseLimits: column_name_length, table_name_length, columns_per_table, indexes_per_table, columns_per_multicolumn_index, sql_query_length, และ joins_per_query (Commit)

  • ยกเลิก update_attributes/! เพื่อใช้แทน update/! (Commit)

9.3 การเปลี่ยนแปลงที่สำคัญ

  • เพิ่มเวอร์ชันขั้นต่ำของแพ็กเกจ sqlite3 เป็น 1.4 (Pull Request)

  • เพิ่ม rails db:prepare เพื่อสร้างฐานข้อมูลหากยังไม่มี และเรียกใช้งานการเคลื่อนย้ายของมัน (Pull Request)

  • เพิ่ม after_save_commit callback เป็นทางเลือกสำหรับ after_commit :hook, on: [ :create, :update ] (Pull Request)

  • เพิ่ม ActiveRecord::Relation#extract_associated เพื่อแยกบันทึกที่เกี่ยวข้องจากความสัมพันธ์ (Pull Request)

  • เพิ่ม ActiveRecord::Relation#annotate เพื่อเพิ่มความคิดเห็น SQL ในการค้นหา ActiveRecord::Relation (Pull Request)

  • เพิ่มการสนับสนุนในการตั้งค่า Optimizer Hints บนฐานข้อมูล (Pull Request)

  • เพิ่มเมธอด insert_all/insert_all!/upsert_all เพื่อทำการแทรกข้อมูลเป็นกลุ่ม (Pull Request)

  • เพิ่ม rails db:seed:replant ที่ตัดตารางของแต่ละฐานข้อมูล สำหรับสภาพแวดล้อมปัจจุบันและโหลด seed (Pull Request)

  • เพิ่มเมธอด reselect ซึ่งเป็นตัวย่อสำหรับ unscope(:select).select(fields) (Pull Request)

  • เพิ่มขอบเขตลบสำหรับค่า enum ทั้งหมด (Pull Request)

  • เพิ่ม #destroy_by และ #delete_by เพื่อลบเงื่อนไข (Pull Request)

  • เพิ่มความสามารถในการเปลี่ยนการเชื่อมต่อฐานข้อมูลโดยอัตโนมัติ (Pull Request)

  • เพิ่มความสามารถในการป้องกันการเขียนข้อมูลไปยังฐานข้อมูลในระหว่างการทำงานของบล็อก (Pull Request)

  • เพิ่ม API เพื่อเปลี่ยนการเชื่อมต่อเพื่อสนับสนุนฐานข้อมูลหลายรายการ (Pull Request)

  • ทำให้ timestamps พร้อมกับความแม่นยำเป็นค่าเริ่มต้นสำหรับการเคลื่อนย้าย (Pull Request)

  • สนับสนุนตัวเลือก :size เพื่อเปลี่ยนขนาดของข้อความและ blob ใน MySQL (Pull Request)

  • ตั้งค่าคอลัมน์ foreign key และ foreign type เป็น NULL สำหรับความสัมพันธ์หลายรูปแบบใน dependent: :nullify (Pull Request)

  • อนุญาตให้ ActionController::Parameters ที่ได้รับอนุญาตเป็นตัวแปรส่งผ่านไปยัง ActiveRecord::Relation#exists? (Pull Request)

  • เพิ่มการสนับสนุนใน #where สำหรับช่วงที่ไม่มีที่สิ้นสุดที่เพิ่มเข้ามาใน Ruby 2.6 (Pull Request)

  • ทำให้ ROW_FORMAT=DYNAMIC เป็นตัวเลือกการสร้างตารางเริ่มต้นสำหรับ MySQL (Pull Request)

  • เพิ่มความสามารถในการปิดใช้งานขอบเขตที่สร้างขึ้นโดย ActiveRecord.enum (Pull Request)

  • ทำให้การเรียงลำดับอัตโนมัติสามารถกำหนดค่าได้สำหรับคอลัมน์ (Pull Request)

  • เพิ่มรุ่นขั้นต่ำของ PostgreSQL เป็นเวอร์ชัน 9.3 โดยลดการสนับสนุนสำหรับเวอร์ชัน 9.1 และ 9.2 (Pull Request)

  • ทำให้ค่าของ enum เป็นแบบแช่แข็ง และเกิดข้อผิดพลาดเมื่อพยายามแก้ไขค่าเหล่านั้น (Pull Request)

  • ทำให้ SQL ของข้อผิดพลาด ActiveRecord::StatementInvalid เป็นคุณสมบัติของข้อผิดพลาดที่แยกออกมาเป็นของตัวเอง และรวม SQL binds เป็นคุณสมบัติข้อผิดพลาดที่แยกออกมาเป็นของตัวเอง (Pull Request)

  • เพิ่มตัวเลือก :if_not_exists ใน create_table (Pull Request)

  • เพิ่มการสนับสนุนฐานข้อมูลหลายรายการใน rails db:schema:cache:dump และ rails db:schema:cache:clear (Pull Request)

  • เพิ่มการสนับสนุนการกำหนดค่าแบบแฮชและ URL ในฐานข้อมูลแฮชของ ActiveRecord::Base.connected_to (Pull Request)

  • เพิ่มการสนับสนุนสูตรเริ่มต้นและดัชนีสูตรสำหรับ MySQL (Pull Request)

  • เพิ่มตัวเลือก index สำหรับช่วยในการเปลี่ยนแปลงตาราง (Pull Request)

  • แก้ไขการย้อนกลับของ transaction สำหรับการเรียกใช้งาน ที่อยู่ภายใน transaction ในการย้อนกลับของการเรียกใช้งาน (Pull Request)

  • อนุญาตให้ ActiveRecord::Base.configurations= สามารถตั้งค่าด้วยแฮชที่มีสัญลักษณ์ (Pull Request)

  • แก้ไขการนับจำนวนเพื่ออัปเดตเฉพาะเมื่อบันทึกเร็คคอร์ดจริงๆ (Pull Request)

  • เพิ่มการสนับสนุนดัชนีแสดงออกสำหรับ SQLite adapter (Pull Request)

  • อนุญาตให้คลาสย่อยนิยามการเรียกใช้งานอัตโนมัติสำหรับบันทึกที่เกี่ยวข้อง (Pull Request)

  • เพิ่มรุ่นขั้นต่ำของ MySQL เป็นเวอร์ชัน 5.5.8 (Pull Request)

  • ใช้ชุดตัวอักษร utf8mb4 เป็นค่าเริ่มต้นใน MySQL (Pull Request)

  • เพิ่มความสามารถในการกรองข้อมูลที่เป็นข้อมูลที่อ่อนไหวใน #inspect (Pull Request, Pull Request)

  • เปลี่ยน ActiveRecord::Base.configurations เพื่อให้ส่งคืนวัตถุแทนแฮช (Pull Request)

  • เพิ่มการกำหนดค่าฐานข้อมูลเพื่อปิดการใช้งาน advisory locks (Pull Request)

  • อัปเดต SQLite3 adapter alter_table เพื่อกู้คืน foreign keys (Pull Request)

  • อนุญาตให้ :to_table option ของ remove_foreign_key เป็นสถานะที่สามารถกลับได้ (Pull Request)

  • แก้ไขค่าเริ่มต้นสำหรับ MySQL time types ที่ระบุความแม่นยำ (Pull Request)

  • แก้ไข touch option เพื่อให้ทำงานได้สอดคล้องกับ Persistence#touch method อย่างสม่ำเสมอ (Pull Request)

  • สร้างข้อยกเว้นสำหรับการกำหนดคอลัมน์ซ้ำใน Migrations (Pull Request)

  • เพิ่มรุ่นขั้นต่ำของ SQLite เป็นเวอร์ชัน 3.8 (Pull Request)

  • แก้ไขบันทึกหลักไม่ให้บันทึกพร้อมกับบันทึกลูกซ้ำ (Pull Request)

  • ตรวจสอบให้แน่ใจว่า Associations::CollectionAssociation#size และ Associations::CollectionAssociation#empty? ใช้ loaded association ids ถ้ามีอยู่ (Pull Request)

  • เพิ่มการสนับสนุนในการโหลด associations ของ polymorphic associations เมื่อไม่มีรายการทั้งหมดที่มี associations ที่ร้องขอ (Commit)

  • เพิ่มเมธอด touch_all ใน ActiveRecord::Relation (Pull Request)

  • เพิ่ม ActiveRecord::Base.base_class? predicate (Pull Request)

  • เพิ่มตัวเลือก prefix/suffix ที่กำหนดเองใน ActiveRecord::Store.store_accessor (Pull Request)

  • เพิ่ม ActiveRecord::Base.create_or_find_by/! เพื่อจัดการกับสถานการณ์ SELECT/INSERT race condition ใน ActiveRecord::Base.find_or_create_by/! โดยใช้ unique constraints ในฐานข้อมูล (Pull Request)

  • เพิ่ม Relation#pick เป็นตัวย่อสำหรับ single-value plucks (Pull Request)

10 Active Storage

โปรดอ้างอิงที่ Changelog สำหรับรายละเอียดการเปลี่ยนแปลง

10.1 การลบ

10.2 การเลิกใช้

  • เลิกใช้ config.active_storage.queue และใช้ config.active_storage.queues.analysis และ config.active_storage.queues.purge แทน (Pull Request)

  • เลิกใช้ ActiveStorage::Downloading และใช้ ActiveStorage::Blob#open แทน (Commit)

  • เลิกใช้ mini_magick โดยตรงสำหรับการสร้าง image variants และใช้ image_processing แทน (Commit)

  • เลิกใช้ :combine_options ใน Active Storage's ImageProcessing transformer โดยไม่มีตัวแทน (Commit)

10.3 การเปลี่ยนแปลงที่สำคัญ

  • เพิ่มการสนับสนุนในการสร้าง BMP image variants (Pull Request)

  • เพิ่มการสนับสนุนในการสร้าง TIFF image variants (Pull Request)

  • เพิ่มการสนับสนุนในการสร้าง progressive JPEG image variants (Pull Request)

  • เพิ่ม ActiveStorage.routes_prefix เพื่อกำหนดค่าเส้นทางที่สร้างขึ้นโดย Active Storage (Pull Request)

  • สร้างการตอบสนอง 404 Not Found ใน ActiveStorage::DiskController#show เมื่อ ไฟล์ที่ร้องขอหายไปจาก disk service (Pull Request)

  • เพิ่ม ActiveStorage::FileNotFoundError เมื่อไฟล์ที่ร้องขอหายไปสำหรับ ActiveStorage::Blob#download และ ActiveStorage::Blob#open (Pull Request)

  • เพิ่มคลาส ActiveStorage::Error ที่เป็นคลาสทั่วไปที่ข้อยกเว้นของ Active Storage สืบทอดมาจาก (Commit)

  • บันทึกไฟล์ที่อัปโหลดที่กำหนดให้กับบันทึกไปยังที่เก็บเมื่อบันทึกบันทึกแทนที่ทันที (Pull Request)

  • ตัวเลือกที่จะแทนที่ไฟล์ที่มีอยู่แทนที่การเพิ่มไฟล์เมื่อกำหนดให้กับคอลเลกชันของการแนบ (เช่น @user.update!(images: [ … ])) ใช้ config.active_storage.replace_on_assign_to_many เพื่อควบคุมพฤติกรรมนี้ (Pull Request, Pull Request)

  • เพิ่มความสามารถในการสะท้อนกลับไปที่การแนบที่กำหนดไว้โดยใช้กลไกการสะท้อน Active Record ที่มีอยู่ (Pull Request)

  • เพิ่ม ActiveStorage::Blob#open ซึ่งดาวน์โหลด blob ไปยัง tempfile บนดิสก์และให้ tempfile (Commit)

  • รองรับการดาวน์โหลดแบบสตรีมจาก Google Cloud Storage ต้องใช้เวอร์ชัน 1.11+ ของ google-cloud-storage gem (Pull Request)

  • ใช้ image_processing gem สำหรับตัวแปร Active Storage แทนการใช้ mini_magick โดยตรง (Pull Request)

11 Active Model

โปรดอ้างอิงที่ Changelog สำหรับการเปลี่ยนแปลงที่ละเอียด

11.1 การลบ

11.2 การเลิกใช้

11.3 การเปลี่ยนแปลงที่สำคัญ

  • เพิ่มตัวเลือกการกำหนดรูปแบบของ ActiveModel::Errors#full_message (Pull Request)

  • เพิ่มการสนับสนุนในการกำหนดค่าชื่อแอตทริบิวต์สำหรับ has_secure_password (Pull Request)

  • เพิ่มเมธอด #slice! ให้กับ ActiveModel::Errors (Pull Request)

  • เพิ่ม ActiveModel::Errors#of_kind? เพื่อตรวจสอบความเป็นมาของข้อผิดพลาดที่เฉพาะเจาะจง (Pull Request)

  • แก้ไขเมธอด ActiveModel::Serializers::JSON#as_json สำหรับ timestamp (Pull Request)

  • แก้ไขตัวตรวจสอบ numericality เพื่อใช้ค่าก่อนแปลงชนิดยกเว้น Active Record (Pull Request)

  • แก้ไขการตรวจสอบความเท่าเทียมของ numericality ของ BigDecimal และ Float โดยแปลงเป็น BigDecimal ทั้งสองด้านของการตรวจสอบ (Pull Request)

  • แก้ไขค่าปีเมื่อแปลง multiparameter time hash (Pull Request)

  • แปลงค่าตัวแปร boolean ที่เป็นสัญลักษณ์เท็จเป็น false บนแอตทริบิวต์ boolean (Pull Request)

  • ส่งคืนวันที่ที่ถูกต้องในขณะแปลงพารามิเตอร์ใน value_from_multiparameter_assignment สำหรับ ActiveModel::Type::Date (Pull Request)

  • ย้อนกลับไปที่ลักษณะที่เกี่ยวข้องก่อนจะย้อนกลับไปที่เนมสเปซ :errors เมื่อดึงการแปลผิดพลาด (Pull Request)

    Active Support

โปรดอ้างอิงที่ Changelog เพื่อดูการเปลี่ยนแปลงที่ละเอียด

11.4 การลบ

  • ลบเมธอด #acronym_regex ที่ถูกยกเลิกจาก Inflections (Commit)

  • ลบเมธอด Module#reachable? ที่ถูกยกเลิก (Commit)

  • ลบ Kernel#` โดยไม่มีการแทนที่ใด ๆ (Pull Request)

11.5 การเลิกใช้

  • เลิกใช้การใช้ตัวเลขลบเป็นอาร์กิวเมนต์สำหรับ String#first และ String#last (Pull Request)

  • เลิกใช้ ActiveSupport::Multibyte::Unicode#downcase/upcase/swapcase และใช้ String#downcase/upcase/swapcase แทน (Pull Request)

  • เลิกใช้ ActiveSupport::Multibyte::Unicode#normalize และ ActiveSupport::Multibyte::Chars#normalize และใช้ String#unicode_normalize แทน (Pull Request)

  • เลิกใช้ ActiveSupport::Multibyte::Chars.consumes? และใช้ String#is_utf8? แทน (Pull Request)

  • เลิกใช้ ActiveSupport::Multibyte::Unicode#pack_graphemes(array) และ ActiveSupport::Multibyte::Unicode#unpack_graphemes(string) และใช้ array.flatten.pack("U*") และ string.scan(/\X/).map(&:codepoints) ตามลำดับ (Pull Request)

11.6 การเปลี่ยนแปลงที่สำคัญ

  • เพิ่มการสนับสนุนการทดสอบแบบพร้อมกัน (Pull Request)

  • ตรวจสอบให้แน่ใจว่า String#strip_heredoc รักษาความแข็งแรงของสตริงที่แช่แข็งไว้ (Pull Request)

  • เพิ่ม String#truncate_bytes เพื่อตัดสตริงให้มีขนาดไบต์สูงสุดโดยไม่ทำให้ตัวอักษรหลายไบต์หรือกลุ่มกราฟีมแตก (Pull Request)

  • เพิ่มตัวเลือก private ในเมธอด delegate เพื่อเลือกใช้เมธอดเอกชน ตัวเลือกนี้ยอมรับค่า true/false (Pull Request)

  • เพิ่มการสนับสนุนการแปลผ่าน I18n สำหรับ ActiveSupport::Inflector#ordinal และ ActiveSupport::Inflector#ordinalize (Pull Request)

  • เพิ่มเมธอด before? และ after? ใน Date, DateTime, Time, และ TimeWithZone (Pull Request)

  • แก้ไขข้อบกพร่องที่ URI.unescape จะล้มเหลวเมื่อมีอินพุตที่ผสมระหว่างตัวอักษรยูนิโคดและตัวอักษรที่หลบหนี้ (Pull Request)

  • แก้ไขข้อบกพร่องที่ ActiveSupport::Cache จะทำให้ขนาดการเก็บข้อมูลขยายอย่างมากเมื่อเปิดใช้งานการบีบอัด (Pull Request)

  • Redis cache store: delete_matched ไม่บล็อกเซิร์ฟเวอร์ Redis อีกต่อไป (Pull Request)

  • แก้ไขข้อบกพร่องที่ ActiveSupport::TimeZone.all จะล้มเหลวเมื่อข้อมูล tzinfo สำหรับเขตเวลาใด ๆ ที่กำหนดไว้ใน ActiveSupport::TimeZone::MAPPING หายไป (Pull Request)

  • เพิ่ม Enumerable#index_with ซึ่งช่วยให้สร้างแฮชจาก enumerable ด้วยค่าจากบล็อกที่ผ่านมาหรืออาร์กิวเมนต์เริ่มต้น (Pull Request)

  • อนุญาตให้ Range#=== และ Range#cover? ทำงานกับอาร์กิวเมนต์ชนิด Range (Pull Request)

  • สนับสนุนการหมดอายุของคีย์ในการดำเนินการ increment/decrement ของ RedisCacheStore (Pull Request)

  • เพิ่มคุณสมบัติเวลา CPU, เวลาว่างเปล่า และการจัดสรรทรัพยากรในเหตุการณ์ผู้สมัครใช้งานบันทึก (Pull Request)

  • เพิ่มการสนับสนุนสำหรับอ็อบเจกต์เหตุการณ์ในระบบการแจ้งเตือน Active Support (Pull Request)

  • เพิ่มการสนับสนุนให้ไม่แคชรายการ nil โดยการเพิ่มตัวเลือกใหม่ skip_nil สำหรับ ActiveSupport::Cache#fetch (Pull Request)

  • เพิ่มเมธอด Array#extract! ซึ่งจะลบและส่งคืนองค์ประกอบที่ฟังก์ชันคืนค่าเป็นจริง (Pull Request)

  • รักษาสตริงที่ปลอดภัยสำหรับ HTML หลังจากที่ตัดออก (Pull Request)

  • เพิ่มการสนับสนุนในการติดตามการโหลดอัตโนมัติของค่าคงที่ผ่านการบันทึก (Commit)

  • กำหนด unfreeze_time เป็นชื่อย่อของ travel_back (Pull Request)

  • เปลี่ยน ActiveSupport::TaggedLogging.new เพื่อให้ส่งคืนตัวอย่างเครื่องมือเขียนบันทึกใหม่แทนการเปลี่ยนแปลงตัวแปรที่ได้รับเป็นอาร์กิวเมนต์ (Pull Request)

  • จัดการ #delete_prefix, #delete_suffix และ #unicode_normalize เป็นเมธอดที่ไม่ปลอดภัยสำหรับ HTML (Pull Request)

  • แก้ไขข้อบกพร่องที่ #without สำหรับ ActiveSupport::HashWithIndifferentAccess จะล้มเหลวเมื่อมีอาร์กิวเมนต์เป็นสัญลักษณ์ (Pull Request)

  • เปลี่ยนชื่อ Module#parent, Module#parents, และ Module#parent_name เป็น module_parent, module_parents, และ module_parent_name (Pull Request)

  • เพิ่ม ActiveSupport::ParameterFilter (Pull Request)

  • แก้ไขปัญหาที่ระยะเวลาถูกปัดเป็นวินาทีเต็มเมื่อมีจำนวนทศนิยม ถูกเพิ่มเข้าไปในระยะเวลา (Pull Request)

  • ทำให้ #to_options เป็นชื่อย่อของ #symbolize_keys ใน ActiveSupport::HashWithIndifferentAccess (Pull Request)

  • ไม่ยกเว้นข้อยกเว้นอีกต่อไปหากบล็อกเดียวกันถูกรวมเข้าไปหลายครั้ง สำหรับ Concern (Pull Request)

  • รักษาลำดับคีย์ที่ถูกส่งผ่านไปยัง ActiveSupport::CacheStore#fetch_multi (Pull Request)

  • แก้ไข String#safe_constantize เพื่อไม่ส่งคืน LoadError สำหรับการอ้างอิงค่าคงที่ที่เขียนผิดตัวอักษร (Pull Request)

  • เพิ่ม Hash#deep_transform_values และ Hash#deep_transform_values! (Commit)

  • เพิ่ม ActiveSupport::HashWithIndifferentAccess#assoc (Pull Request)

  • เพิ่ม before_reset callback ให้กับ CurrentAttributes และกำหนด after_reset เป็นชื่อย่อของ resets เพื่อความสมมาตร (Pull Request)

  • แก้ไข ActiveSupport::Notifications.unsubscribe เพื่อจัดการถูกต้อง กับผู้สมัครที่เป็น Regex หรือผู้สมัครที่มีรูปแบบหลายรูปแบบอื่น ๆ (Pull Request)

  • เพิ่มกลไกการโหลดอัตโนมัติใหม่โดยใช้ Zeitwerk (Commit)

  • เพิ่ม Array#including และ Enumerable#including เพื่อขยายคอลเลกชันได้อย่างสะดวก (Commit)

  • เปลี่ยนชื่อ Array#without และ Enumerable#without เป็น Array#excluding และ Enumerable#excluding ชื่อเดิมของเมธอดถูกเก็บไว้เป็นชื่อย่อ (Commit)

  • เพิ่มการสนับสนุนในการระบุ locale ให้กับ transliterate และ parameterize (Pull Request)

  • แก้ไข Time#advance เพื่อให้ทำงานกับวันที่ก่อน 1001-03-07 (Pull Request)

  • อัปเดต ActiveSupport::Notifications::Instrumenter#instrument เพื่ออนุญาตให้ไม่ต้องส่งพารามิเตอร์ block (Pull Request)

  • ใช้ weak references ในตัวติดตามลูกสายเพื่อให้สามารถกำจัดลูกสายที่ไม่มีชื่อได้ (Pull Request)

  • เรียกใช้เมธอดทดสอบด้วย with_info_handler เพื่อให้ปลั๊กอิน minitest-hooks ทำงาน (Commit)

  • รักษาสถานะ html_safe? ใน ActiveSupport::SafeBuffer#* (Pull Request)

12 Active Job

โปรดอ้างอิงที่ Changelog สำหรับการเปลี่ยนแปลงที่ละเอียด

12.1 การลบ

  • ลบการสนับสนุน Qu gem (Pull Request)

12.2 การเลิกใช้

12.3 การเปลี่ยนแปลงที่สำคัญ

  • เพิ่มการสนับสนุนตัวแปรลงความสามารถที่กำหนดเองสำหรับอาร์กิวเมนต์ของ Active Job (Pull Request)

  • เพิ่มการสนับสนุนในการดำเนินงาน Active Jobs ในโซนเวลาที่เรียกคิว (Pull Request)

  • อนุญาตให้ส่งพารามิเตอร์ของข้อกำหนด retry_on/discard_on หลายรายการ (Commit)

  • อนุญาตให้เรียกใช้ assert_enqueued_with และ assert_enqueued_email_with โดยไม่ต้องใช้ block (Pull Request)

  • ห่อการแจ้งเตือนสำหรับ enqueue และ enqueue_at ใน callback around_enqueue แทน callback after_enqueue (Pull Request)

  • อนุญาตให้เรียกใช้ perform_enqueued_jobs โดยไม่ต้องใช้ block (Pull Request)

  • อนุญาตให้เรียกใช้ assert_performed_with โดยไม่ต้องใช้ block (Pull Request)

  • เพิ่มตัวเลือก :queue ในการตรวจสอบงานและช่วยเหลือ (Pull Request)

  • เพิ่ม hooks ใน Active Job รอบการลองใหม่และการละทิ้ง (Pull Request)

  • เพิ่มวิธีการทดสอบสำหรับเซตของอาร์กิวเมนต์เมื่อดำเนินงานงาน (Pull Request)

  • รวมอาร์กิวเมนต์ที่ถอดรหัสในงานที่ส่งกลับโดยเครื่องมือช่วยทดสอบ Active Job (Pull Request)

  • อนุญาตให้เครื่องมือช่วยการยืนยัน Active Job รับ Proc สำหรับคีย์เวิร์ด only (Pull Request)

  • ลดไมโครวินาทีและนาโนวินาทีจากอาร์กิวเมนต์งานในเครื่องมือช่วยการยืนยัน (Pull Request)

13 Ruby on Rails Guides

โปรดอ้างอิงที่ Changelog สำหรับการเปลี่ยนแปลงที่ละเอียด

13.1 การเปลี่ยนแปลงที่สำคัญ

  • เพิ่มเอกสาร Multiple Databases with Active Record (Pull Request)

  • เพิ่มส่วนเกี่ยวกับการแก้ปัญหาการโหลดค่าคงที่อัตโนมัติ (Commit)

  • เพิ่มเอกสาร Action Mailbox Basics (Pull Request)

  • เพิ่มเอกสาร Action Text Overview (Pull Request)

    เครดิต

ดูรายชื่อเต็มของผู้มีส่วนร่วมใน Rails ได้ที่ รายชื่อผู้มีส่วนร่วมใน Rails สำหรับผู้ที่ใช้เวลาหลายชั่วโมงในการสร้าง Rails เป็นเฟรมเวิร์กที่เสถียรและทนทาน ขอแสดงความยินดีแก่ทุกคน

ข้อเสนอแนะ

คุณสามารถช่วยปรับปรุงคุณภาพของคู่มือนี้ได้

กรุณาช่วยเพิ่มเติมหากพบข้อผิดพลาดหรือข้อผิดพลาดทางความจริง เพื่อเริ่มต้นคุณสามารถอ่านส่วน การสนับสนุนเอกสาร ของเราได้

คุณอาจพบเนื้อหาที่ไม่สมบูรณ์หรือเนื้อหาที่ไม่ได้อัปเดต กรุณาเพิ่มเอกสารที่ขาดหายไปสำหรับเนื้อหาหลัก โปรดตรวจสอบ Edge Guides ก่อนเพื่อตรวจสอบ ว่าปัญหาได้รับการแก้ไขหรือไม่ในสาขาหลัก ตรวจสอบ คู่มือแนวทาง Ruby on Rails เพื่อดูรูปแบบและกฎเกณฑ์

หากคุณพบข้อผิดพลาดแต่ไม่สามารถแก้ไขได้เอง กรุณา เปิดปัญหา.

และสุดท้าย การสนทนาใด ๆ เกี่ยวกับ Ruby on Rails เอกสารยินดีต้อนรับที่สุดใน เว็บบอร์ดอย่างเป็นทางการของ Ruby on Rails.