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

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

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

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

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

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

2.1 Active Storage

Pull Request

Active Storage ช่วยให้สามารถอัปโหลดไฟล์ไปยังบริการจัดเก็บในคลาวด์ เช่น Amazon S3, Google Cloud Storage, หรือ Microsoft Azure Storage และแนบไฟล์เหล่านั้นกับอ็อบเจกต์ Active Record มีบริการเก็บข้อมูลบนดิสก์ในเครื่องสำหรับการพัฒนาและการทดสอบ และรองรับการสำรองข้อมูลและการย้ายไฟล์ไปยังบริการย่อย ๆ คุณสามารถอ่านข้อมูลเพิ่มเติมเกี่ยวกับ Active Storage ใน ภาพรวม Active Storage คู่มือ

2.2 Redis Cache Store

Pull Request

Rails 5.2 มาพร้อมกับ Redis cache store ที่มีอยู่ในตัว คุณสามารถอ่านข้อมูลเพิ่มเติมเกี่ยวกับนี้ใน การใช้งานแคชด้วย Rails: ภาพรวม คู่มือ

2.3 HTTP/2 Early Hints

Pull Request

Rails 5.2 รองรับ HTTP/2 Early Hints ในการเริ่มต้นเซิร์ฟเวอร์ด้วย Early Hints ให้ส่ง --early-hints ไปยัง bin/rails server

2.4 Credentials

Pull Request

เพิ่มไฟล์ config/credentials.yml.enc เพื่อเก็บความลับของแอปพลิเคชันในโหมดการใช้งานจริง สามารถบันทึกข้อมูลการรับรองความถูกต้องสำหรับบริการบุคคลที่สามในเก็บรักษาที่เข้ารหัสด้วยคีย์ในไฟล์ config/master.key หรือตัวแปรสภาพแวดล้อม RAILS_MASTER_KEY สิ่งนี้จะเป็นการแทนที่ Rails.application.secrets และข้อมูลรหัสผ่านที่เข้ารหัสใน Rails 5.1 อีกทั้ง Rails 5.2 เปิด API ใน Credentials ดังนั้นคุณสามารถจัดการกับการกำหนดค่าที่เข้ารหัสอื่น ๆ ได้อย่างง่ายดาย รวมถึงคีย์และไฟล์ที่เข้ารหัส คุณสามารถอ่านข้อมูลเพิ่มเติมเกี่ยวกับนี้ใน การรักษาความปลอดภัยในแอปพลิเคชัน Rails คู่มือ

2.5 นโยบายความปลอดภัยของเนื้อหา

Pull Request

Rails 5.2 มาพร้อมกับ DSL ใหม่ที่ช่วยให้คุณสามารถกำหนดค่า นโยบายความปลอดภัยของเนื้อหา สำหรับแอปพลิเคชันของคุณได้ คุณสามารถกำหนดค่านโยบายเริ่มต้นทั่วโลกแล้วแทนที่ด้วยนโยบายแยกตามทรัพยากรและใช้ lambda เพื่อซ้อนค่าตามคำขอลงในส่วนหัว เช่น โดเมนย่อยของบัญชีในแอปพลิเคชันแบบหลายผู้เช่า คุณสามารถอ่านข้อมูลเพิ่มเติมเกี่ยวกับนี้ได้ในเอกสาร Securing Rails Applications

3 Railties

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

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

  • เลิกใช้งานเมธอด capify! ใน generators และ templates (Pull Request)

  • เลิกใช้การส่งชื่อสภาพแวดล้อมเป็นอาร์กิวเมนต์ปกติในคำสั่ง rails dbconsole และ rails console แทนที่ควรใช้ตัวเลือก -e (Commit)

  • เลิกใช้การใช้คลาสย่อยของ Rails::Application เพื่อเริ่มเซิร์ฟเวอร์ Rails (Pull Request)

  • เลิกใช้งาน after_bundle callback ใน Rails plugin templates (Pull Request)

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

  • เพิ่มส่วนที่แชร์ใน config/database.yml ที่จะโหลดสำหรับทุกสภาพแวดล้อม (Pull Request)

  • เพิ่ม railtie.rb ใน generator ของปลั๊กอิน (Pull Request)

  • ล้างไฟล์สกรีนช็อตในงาน tmp:clear (Pull Request)

  • ข้ามคอมโพเนนต์ที่ไม่ได้ใช้งานเมื่อเรียกใช้งาน bin/rails app:update หากการสร้างแอปเริ่มต้นข้าม Action Cable, Active Record เป็นต้น งานอัพเดตจะใช้งานการข้ามเหล่านั้นเช่นกัน (Pull Request)

  • อนุญาตให้ส่งชื่อการเชื่อมต่อที่กำหนดเองให้กับคำสั่ง rails dbconsole เมื่อใช้การกำหนดค่าฐานข้อมูลระดับ 3 ระดับ เช่น bin/rails dbconsole -c replica (Commit)

  • ขยายตัวย่อสำหรับชื่อสภาพแวดล้อมที่เรียกใช้งานคำสั่ง console และ dbconsole อย่างถูกต้อง (Commit)

  • เพิ่ม bootsnap เข้าไปใน Gemfile เริ่มต้น (Pull Request)

  • สนับสนุน - เป็นวิธีที่เป็นแพลตฟอร์มเพื่อเรียกใช้สคริปต์จาก stdin ด้วย rails runner (Pull Request)

  • เพิ่มเวอร์ชัน ruby x.x.x เข้าไปใน Gemfile และสร้างไฟล์ .ruby-version ที่รากที่มีเวอร์ชัน Ruby ปัจจุบันเมื่อสร้างแอปพลิเคชัน Rails ใหม่ (Pull Request)

  • เพิ่มตัวเลือก --skip-action-cable ใน generator ของปลั๊กอิน (Pull Request)

  • เพิ่ม git_source ใน Gemfile สำหรับ generator ของ plugin (Pull Request)

  • ข้าม component ที่ไม่ได้ใช้เมื่อรัน bin/rails ใน Rails plugin (Commit)

  • ปรับปรุงการเยื้องบรรทัดสำหรับ generator actions (Pull Request)

  • ปรับปรุงการเยื้องบรรทัดสำหรับ routes (Pull Request)

  • เพิ่มตัวเลือก --skip-yarn ใน plugin generator (Pull Request)

  • รองรับการระบุเวอร์ชันหลายรุ่นสำหรับเมธอด gem ใน Generators (Pull Request)

  • สร้าง secret_key_base จากชื่อแอปในสภาพแวดล้อมการพัฒนาและทดสอบ (Pull Request)

  • เพิ่ม mini_magick ใน Gemfile ดีฟอลต์เป็นคอมเมนต์ (Pull Request)

  • rails new และ rails plugin new ได้ Active Storage โดยค่าเริ่มต้น เพิ่มความสามารถในการข้าม Active Storage ด้วย --skip-active-storage และทำเช่นนั้นโดยอัตโนมัติเมื่อใช้ --skip-active-record (Pull Request)

4 Action Cable

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

4.1 การลบ

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

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

  • เพิ่มการสนับสนุนตัวเลือก host, port, db และ password ใน cable.yml (Pull Request)

  • แฮชตัวระบุสตรีมที่ยาวเมื่อใช้ PostgreSQL adapter (Pull Request)

5 Action Pack

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

5.1 การลบ

  • ลบ ActionController::ParamsParser::ParseError ที่ถูกยกเลิกแล้ว (Commit)

5.2 การเลิกใช้

  • เลิกใช้ #success?, #missing? และ #error? ใน ActionDispatch::TestResponse (Pull Request)

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

  • เพิ่มการสนับสนุนการใช้ cache keys ที่สามารถ reuse ได้กับ fragment caching (Pull Request)

  • เปลี่ยนรูปแบบ cache key สำหรับ fragments เพื่อทำให้ง่ายต่อการตรวจสอบข้อผิดพลาดในการสร้าง key (Pull Request)

  • AEAD encrypted cookies และ sessions ด้วย GCM (Pull Request)

  • ป้องกันการปลอมแปลงข้อมูลโดยค่าเริ่มต้น (Pull Request)

  • บังคับให้ลางของ signed/encrypted cookie ที่หมดอายุที่เซิร์ฟเวอร์ (Pull Request)

  • ตัวเลือก :expires ของคุกกี้รองรับ ActiveSupport::Duration object (Pull Request)

  • ใช้การตั้งค่า server config :puma ที่ Capybara ลงทะเบียน (Pull Request)

  • Vereinfachung des Cookies-Middleware mit Unterstützung für Schlüsselrotation (Pull Request)

  • เพิ่มความสามารถในการเปิดใช้งาน Early Hints สำหรับ HTTP/2 (Pull Request)

  • เพิ่มการสนับสนุน headless chrome ใน System Tests (Pull Request)

  • เพิ่มตัวเลือก :allow_other_host ในเมธอด redirect_back (Pull Request)

  • ทำให้ assert_recognizes สามารถเดินทางผ่านเอ็นจินที่ติดตั้งแล้วได้ (Pull Request)

  • เพิ่ม DSL สำหรับกำหนดค่าเฮดเดอร์ Content-Security-Policy (Pull Request, Commit, Commit)

  • ลงทะเบียน MIME types ของเสียง/วิดีโอ/ฟอนต์ที่ได้รับความสนับสนุนจากเบราว์เซอร์รุ่นใหม่ (Pull Request)

  • เปลี่ยนการตั้งค่าเริ่มต้นของรูปภาพจากการแสดงผลแบบ inline เป็น simple ในการทดสอบระบบ (Commit)

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

  • เพิ่ม X-Download-Options และ X-Permitted-Cross-Domain-Policies ที่ปลอดภัยในการตั้งค่าเริ่มต้นของเฮดเดอร์ (Commit)

  • เปลี่ยนการตั้งค่าระบบทดสอบเพื่อตั้งค่า Puma เป็นเซิร์ฟเวอร์เริ่มต้นเมื่อผู้ใช้ไม่ได้ระบุเซิร์ฟเวอร์อื่นเอง (Pull Request)

  • เพิ่มเฮดเดอร์ Referrer-Policy ในการตั้งค่าเริ่มต้นของเฮดเดอร์ (Commit)

  • ปรับให้การทำงานของ ActionController::Parameters#each เหมือนกับ Hash#each (Pull Request)

  • เพิ่มการสนับสนุนการสร้าง nonce อัตโนมัติสำหรับ Rails UJS (Commit)

  • อัปเดตค่า HSTS max-age เริ่มต้นเป็น 31536000 วินาที (1 ปี) เพื่อตรงตามค่า max-age ขั้นต่ำที่กำหนดใน https://hstspreload.org/ (Commit)

  • เพิ่มเมธอดย่อย to_hash สำหรับ to_h ใน cookies เพิ่มเมธอดย่อย to_h สำหรับ to_hash ใน session (Commit)

6 Action View

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

6.1 การลบ

  • ลบ Erubis ERB handler ที่ถูกเลิกใช้งาน (Commit)

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

  • เลิกใช้งานเมธอด image_alt helper ที่ใช้เพิ่มข้อความ alt ตั้งต้นให้กับรูปภาพที่สร้างขึ้นโดย image_tag (Pull Request)

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

  • เพิ่มประเภท :json ให้กับ auto_discovery_link_tag เพื่อสนับสนุน JSON Feeds (Pull Request)

  • เพิ่มตัวเลือก srcset ให้กับ image_tag helper (Pull Request)

  • แก้ไขปัญหาเกี่ยวกับ field_error_proc ที่ครอบ optgroup และ option แบ่งกลุ่มของ select (Pull Request)

  • เปลี่ยน form_with เพื่อสร้าง id โดยค่าเริ่มต้น (Commit)

  • เพิ่ม preload_link_tag helper (Pull Request)

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

7 Action Mailer

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

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

  • อนุญาตให้คลาส Action Mailer กำหนดค่างานส่งของตนเอง (Pull Request)

  • เพิ่ม assert_enqueued_email_with test helper (Pull Request)

8 Active Record

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

การลบ

  • ลบ #migration_keys ที่ถูกยกเลิก (Pull Request)

  • ลบการสนับสนุนที่ถูกยกเลิกใน quoted_id เมื่อทำการแปลงประเภทของอ็อบเจ็กต์ Active Record (Commit)

  • ลบอาร์กิวเมนต์ที่ถูกยกเลิก default จาก index_name_exists? (Commit)

  • ลบการสนับสนุนที่ถูกยกเลิกในการส่งคลาสไปยัง :class_name ในการเชื่อมโยง (Commit)

  • ลบเมธอดที่ถูกยกเลิก initialize_schema_migrations_table และ initialize_internal_metadata_table (Commit)

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

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

  • ลบเมธอดที่ถูกยกเลิก ActiveRecord::Migrator.schema_migrations_table_name (Commit)

  • ลบอาร์กิวเมนต์ที่ถูกยกเลิก name จาก #indexes (Commit)

  • ลบอาร์กิวเมนต์ที่ถูกยกเลิกจาก #verify! (Commit)

  • ลบการกำหนดค่าที่ถูกยกเลิก .error_on_ignored_order_or_limit (Commit)

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

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

การเลิกใช้

  • เลิกใช้ supports_statement_cache? (Pull Request)

  • เลิกใช้การส่งอาร์กิวเมนต์และบล็อกพร้อมกันใน count และ sum ใน ActiveRecord::Calculations (Pull Request)

  • เลิกใช้การจ่ายหน้าที่ให้กับ arel ใน Relation (Pull Request)

  • เลิกใช้เมธอด set_state ใน TransactionState (Commit)

  • เลิกใช้ expand_hash_conditions_for_aggregates โดยไม่มีการแทนที่ (Commit)

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

  • เมื่อเรียกใช้เมธอด dynamic fixture accessor โดยไม่มีอาร์กิวเมนต์ ตอนนี้จะคืนค่า fixtures ทั้งหมดของประเภทนี้ ก่อนหน้านี้เมธอดนี้เสมอคืนค่าอาร์เรย์ที่ว่างเปล่า (Pull Request)

  • แก้ไขความไม่สอดคล้องกันของแอตทริบิวต์ที่เปลี่ยนแปลงเมื่อการเขียนเมธอดอ่านแอตทริบิวต์ Active Record (Pull Request)

  • สนับสนุน Descending Indexes สำหรับ MySQL (Pull Request)

  • แก้ไข bin/rails db:forward การเริ่มต้นของ migration แรก (Commit)

  • สร้างข้อผิดพลาด UnknownMigrationVersionError เมื่อย้าย migration แล้วไม่มี migration ปัจจุบันอยู่ (Commit)

  • ให้เคารพ SchemaDumper.ignore_tables ในงาน rake สำหรับการสร้างโครงสร้างฐานข้อมูล (Pull Request)

  • เพิ่ม ActiveRecord::Base#cache_version เพื่อสนับสนุนคีย์แคชที่สามารถนำกลับมาใช้ซ้ำได้ผ่านรายการเวอร์ชันใหม่ใน ActiveSupport::Cache นี่หมายความว่า ActiveRecord::Base#cache_key ตอนนี้จะคืนค่าคีย์ที่เสถียรภาพและไม่รวมไทม์สแตมป์อีกต่อไป (Pull Request)

  • ป้องกันการสร้าง bind param หากค่าที่แปลงประเภทเป็น nil (Pull Request)

  • ใช้ INSERT แบบกลุ่มเพื่อแทรก fixtures เพื่อประสิทธิภาพที่ดีขึ้น (Pull Request)

  • การผสานรวมสองความสัมพันธ์ที่แสดงการเชื่อมต่อซ้อนกันไม่ได้แปลงการเชื่อมต่อของความสัมพันธ์ที่ผสานเข้าด้วยกันเป็น LEFT OUTER JOIN อีกต่อไป (Pull Request)

  • แก้ไขการทำงานของการทำธุรกรรมให้สามารถนำสถานะไปใช้กับธุรกรรมย่อยได้ ก่อนหน้านี้หากคุณมีการทำธุรกรรมที่ซ้อนกันและธุรกรรมภายนอกถูกยกเลิกการทำงาน ระเบียนจากธุรกรรมภายในยังคงถูกทำเครื่องหมายว่าถูกบันทึกไว้ ได้แก้ไขโดยการนำสถานะของธุรกรรมหลักไปใช้กับธุรกรรมย่อยเมื่อธุรกรรมหลักถูกยกเลิกการทำงาน ซึ่งจะทำให้ระเบียนจากธุรกรรมภายในถูกทำเครื่องหมายว่าไม่ได้ถูกบันทึกไว้ (Commit)

  • แก้ไขการโหลดข้อมูลล่วงหน้า/โหลดข้อมูลล่วงหน้าพร้อมกับการรวมข้อมูลสมาชิกที่รวมการเชื่อมต่อ (Pull Request)

  • ป้องกันข้อผิดพลาดที่เกิดขึ้นจากผู้ติดตามการแจ้งเตือน sql.active_record ไม่ให้เปลี่ยนเป็นข้อยกเว้น ActiveRecord::StatementInvalid (Pull Request)

  • ข้ามการแคชคำสั่งเมื่อทำงานกับกลุ่มของระเบียน (find_each, find_in_batches, in_batches) (Commit)

  • เปลี่ยนการแปลงค่าบูลีนของ sqlite3 เพื่อใช้ 1 และ 0 SQLite รู้จัก 1 และ 0 เป็นค่าจริงและเท็จอย่างเป็นธรรมชาติ แต่ไม่รู้จัก 't' และ 'f' เหมือนที่ถูกแปลงค่าก่อนหน้านี้ (Pull Request)

  • ค่าที่สร้างขึ้นโดยการกำหนดค่าหลายพารามิเตอร์จะใช้ค่าหลังจากการแปลงประเภทสำหรับแสดงผลในฟอร์มข้อมูลแบบฟิลด์เดียว (Commit)

  • ApplicationRecord ไม่ถูกสร้างขึ้นอีกต่อไปเมื่อสร้างโมเดล หากคุณต้องการสร้าง ApplicationRecord สามารถทำได้โดยใช้ rails g application_record (Pull Request)

  • Relation#or ตอนนี้ยอมรับสองความสัมพันธ์ที่มีค่าต่างกันสำหรับ references เท่านั้น เนื่องจาก references อาจถูกเรียกใช้โดยอัตโนมัติจาก where (Commit)

  • เมื่อใช้ Relation#or แยกเงื่อนไขที่เหมือนกันและวางไว้ก่อนเงื่อนไข OR (Pull Request)

  • เพิ่มเมธอดช่วยในการทดสอบ binary (Pull Request)

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

  • เพิ่มคลาสข้อผิดพลาดใหม่ LockWaitTimeout ซึ่งจะถูกเรียกขึ้นเมื่อเกินเวลาที่กำหนดในการรอล็อก (Pull Request)

  • อัปเดตชื่อข้อมูลในการแจ้งเตือน sql.active_record เพื่อให้มีคำอธิบายที่ชัดเจนกว่าเดิม (Pull Request)

  • ใช้อัลกอริทึมที่กำหนดในการลบดัชนีจากฐานข้อมูล (Pull Request)

  • การส่ง Set ไปยัง Relation#where ตอนนี้มีพฤติกรรมเดียวกับการส่งอาร์เรย์ (Commit)

  • PostgreSQL tsrange ตอนนี้เก็บความแม่นยำในระดับเวลาย่อยไว้ (Pull Request)

  • สร้างข้อผิดพลาดเมื่อเรียกใช้ lock! ในระเบียนที่มีการเปลี่ยนแปลง (Commit)

  • แก้ไขข้อบกพร่องที่เรียงลำดับคอลัมน์สำหรับดัชนีไม่ถูกเขียนลงใน db/schema.rb เมื่อใช้แอดาปเตอร์ SQLite (Pull Request)

  • แก้ไข bin/rails db:migrate ด้วย VERSION ที่ระบุ bin/rails db:migrate โดยไม่ระบุ VERSION จะทำงานเหมือนกับไม่มี VERSION ตรวจสอบรูปแบบของ VERSION: อนุญาตให้ใช้หมายเลขเวอร์ชันของการโยกย้ายหรือชื่อไฟล์การโยกย้าย สร้างข้อผิดพลาดถ้ารูปแบบของ VERSION ไม่ถูกต้อง สร้างข้อผิดพลาดถ้าการโยกย้ายเป้าหมายไม่มีอยู่ (Pull Request)

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

  • update_all ตอนนี้จะส่งค่าไปยัง Type#cast ก่อนที่จะส่งไปยัง Type#serialize นั่นหมายความว่า update_all(foo: 'true') จะบันทึกค่า boolean ได้อย่างถูกต้อง (Commit)

  • ต้องระบุส่วน SQL แบบเต็มเมื่อใช้ในเมธอดคิวรีเรียน (Commit, Commit)

  • เพิ่ม #up_only ในการโยกย้ายฐานข้อมูลสำหรับโค้ดที่เกี่ยวข้องเฉพาะเมื่อโยกย้ายขึ้น เช่น เติมคอลัมน์ใหม่ (Pull Request)

  • เพิ่มคลาสข้อผิดพลาดใหม่ QueryCanceled ซึ่งจะถูกเรียกขึ้นเมื่อยกเลิกคำสั่งเนื่องจากคำขอของผู้ใช้ (Pull Request)

  • ไม่อนุญาตให้กำหนดขอบเขตที่ขัดแย้งกับเมธอดของอินสแตนซ์ใน Relation (Pull Request)

  • เพิ่มการสนับสนุนคลาสตัวดำเนินการ PostgreSQL ใน add_index (Pull Request)

  • บันทึกผู้เรียกคำสั่งฐานข้อมูล (Pull Request, Pull Request, Pull Request)

  • ยกเลิกเมธอดแอตทริบิวต์บนลูกสายเมื่อรีเซ็ตข้อมูลคอลัมน์ (Pull Request)

  • ใช้เซลเล็กที่สอดคล้องกับ delete_all ที่มี limit หรือ offset (Commit)

  • แก้ไขความไม่สอดคล้องกันของ first(n) เมื่อใช้กับ limit() เมธอด first(n) ตอนนี้จะใช้ limit() อย่างถูกต้อง เหมือนกับ relation.to_a.first(n) และเหมือนกับพฤติกรรมของ last(n) (Pull Request)

  • แก้ไขความไม่สอดคล้องกันของการสร้างความสัมพันธ์ has_many :through บนอินสแตนซ์หลักที่ยังไม่ได้ถูกบันทึก (Commit)

  • พิจารณาเงื่อนไขการเชื่อมต่อเมื่อลบผ่านบันทึก (Commit)

  • ไม่อนุญาตการเปลี่ยนแปลงวัตถุที่ถูกทำลายหลังจากที่เรียกใช้ save หรือ save! (Commit)

  • แก้ไขปัญหาการผสานความสัมพันธ์กับ left_outer_joins (Pull Request)

  • รองรับตารางภายนอกของ PostgreSQL (Pull Request)

  • ล้างสถานะการทำธุรกรรมเมื่อวัตถุ Active Record ถูกคัดลอก (Pull Request)

  • แก้ไขปัญหาที่ไม่ขยายตัวเมื่อส่งวัตถุ Array เป็นอาร์กิวเมนต์ให้กับเมธอด where โดยใช้คอลัมน์ composed_of (Pull Request)

  • ทำให้ reflection.klass เกิดข้อผิดพลาดถ้า polymorphic? ไม่ถูกใช้งานอย่างถูกต้อง (Commit)

  • แก้ไข #columns_for_distinct ของ MySQL และ PostgreSQL เพื่อให้ ActiveRecord::FinderMethods#limited_ids_for ใช้ค่า primary key ที่ถูกต้อง แม้ว่า ORDER BY คอลัมน์จะรวม primary key ของตารางอื่น (Commit)

  • แก้ไขปัญหา dependent: :destroy สำหรับความสัมพันธ์ has_one/belongs_to ที่คลาสหลักถูกลบเมื่อลูกไม่ถูกลบ (Commit)

  • การเชื่อมต่อฐานข้อมูลที่ไม่ได้ใช้งาน (ก่อนหน้านี้เป็นการเชื่อมต่อที่ถูกทิ้งไว้) ตอนนี้จะถูกลบเป็นระยะๆ โดย connection pool reaper (Commit)

9 Active Model

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

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

  • แก้ไขเมธอด #keys, #values ใน ActiveModel::Errors แก้ไข #keys เพื่อให้ส่งคืนเฉพาะคีย์ที่ไม่มีข้อความว่างเปล่า และแก้ไข #values เพื่อให้ส่งคืนค่าที่ไม่ว่างเปล่า (Pull Request)

  • เพิ่มเมธอด #merge! สำหรับ ActiveModel::Errors (Pull Request)

  • อนุญาตให้ส่ง Proc หรือ Symbol เป็นตัวเลือกให้กับตัวตรวจสอบความยาว (Pull Request)

  • ดำเนินการตรวจสอบความถูกต้องของ ConfirmationValidator เมื่อค่าของ _confirmation เป็น false (Pull Request)

  • โมเดลที่ใช้ attributes API ด้วยค่าเริ่มต้นแบบ proc ตอนนี้สามารถถูก marshalled ได้ (Commit)

  • ไม่สูญเสียการรวม :includes หลายๆ ครั้งที่มีตัวเลือกในการซีเรียลไลซ์ (Commit)

10 Active Support

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

10.1 การลบ

  • ลบตัวกรองสตริง :if และ :unless ที่ถูกยกเลิกสำหรับ callback (Commit)

  • ลบตัวเลือก halt_callback_chains_on_return_false ที่ถูกยกเลิก (Commit)

10.2 การเลิกใช้

  • เลิกใช้เมธอด Module#reachable? (Pull Request)

  • เลิกใช้ secrets.secret_token (Commit)

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

  • เพิ่ม fetch_values สำหรับ HashWithIndifferentAccess (Pull Request)
  • เพิ่มการสนับสนุนสำหรับ :offset ใน Time#change. (Commit)

  • เพิ่มการสนับสนุนสำหรับ :offset และ :zone ใน ActiveSupport::TimeWithZone#change. (Commit)

  • ส่งชื่อ gem และระยะเวลาการเลิกใช้งานไปยังการแจ้งเตือนการเลิกใช้งาน (Pull Request)

  • เพิ่มการสนับสนุนสำหรับรายการแคชที่มีเวอร์ชัน ซึ่งช่วยให้ร้านค้าแคชสามารถนำกลับมาใช้ใหม่ได้ ลดการใช้พื้นที่จัดเก็บได้อย่างมากในกรณีที่มีการเปลี่ยนแปลงบ่อยครั้ง ทำงานร่วมกับการแยก #cache_key และ #cache_version ใน Active Record และใช้ในการแคชของ Action Pack's fragment caching (Pull Request)

  • เพิ่ม ActiveSupport::CurrentAttributes เพื่อให้สามารถเก็บค่าแอตทริบิวต์ในเธรดแยกกันได้ ใช้งานหลักคือการทำให้แอตทริบิวต์ที่เกี่ยวข้องกับแต่ละคำขอสามารถเข้าถึงได้ง่ายทั้งระบบ (Pull Request)

  • #singularize และ #pluralize ตอนนี้รับรู้ถึงคำที่ไม่นับได้สำหรับภาษาที่ระบุ (Commit)

  • เพิ่มตัวเลือกเริ่มต้นใน class_attribute (Pull Request)

  • เพิ่ม Date#prev_occurring และ Date#next_occurring เพื่อคืนค่าวันที่เกิดขึ้นต่อไป/ก่อนหน้าที่ระบุ (Pull Request)

  • เพิ่มตัวเลือกเริ่มต้นในการเข้าถึงแอตทริบิวต์ของโมดูลและคลาส (Pull Request)

  • แคช: write_multi (Pull Request)

  • ตั้งค่า ActiveSupport::MessageEncryptor เริ่มต้นใช้การเข้ารหัส AES 256 GCM (Pull Request)

  • เพิ่ม freeze_time helper ซึ่งจะแช่แข็งเวลาเป็น Time.now ในการทดสอบ (Pull Request)

  • ทำให้ลำดับของ Hash#reverse_merge! สอดคล้องกับ HashWithIndifferentAccess (Pull Request)

  • เพิ่มการสนับสนุนวัตถุประสงค์และการหมดอายุใน ActiveSupport::MessageVerifier และ ActiveSupport::MessageEncryptor (Pull Request)

  • อัปเดต String#camelize เพื่อให้มีการตอบกลับเมื่อมีตัวเลือกที่ไม่ถูกต้อง (Pull Request)

  • Module#delegate_missing_to ตอนนี้เรียก DelegationError ถ้าเป้าหมายเป็น nil เหมือนกับ Module#delegate (Pull Request)

  • เพิ่ม ActiveSupport::EncryptedFile และ ActiveSupport::EncryptedConfiguration (Pull Request)

  • เพิ่ม config/credentials.yml.enc เพื่อเก็บค่าลับของแอปพลิเคชันในสภาพแวดล้อมการใช้งานจริง (Pull Request)

  • เพิ่มการสนับสนุนการหมุนเวียนคีย์ใน MessageEncryptor และ MessageVerifier (Pull Request)

  • คืนวัตถุของ HashWithIndifferentAccess จาก HashWithIndifferentAccess#transform_keys (Pull Request)

  • Hash#slice ตอนนี้ใช้นิยามที่มีอยู่ใน Ruby 2.5+ ถ้าถูกกำหนดไว้ (Commit)

  • IO#to_json ตอนนี้คืนค่าเป็นการแสดงผลของ to_s แทนที่จะพยายามแปลงเป็นอาร์เรย์ นี้แก้ไขข้อบกพร่องที่ IO#to_json จะเกิดข้อผิดพลาด IOError เมื่อเรียกใช้กับวัตถุที่ไม่สามารถอ่านได้ (Pull Request)

  • เพิ่มลายเซ็นเมธอดเดียวกันสำหรับ Time#prev_day และ Time#next_day ให้เหมือนกับ Date#prev_day และ Date#next_day อนุญาตให้ส่งอาร์กิวเมนต์ไปยัง Time#prev_day และ Time#next_day (Commit)

  • เพิ่มลายเซ็นเมธอดเดียวกันสำหรับ Time#prev_month และ Time#next_month ให้เหมือนกับ Date#prev_month และ Date#next_month อนุญาตให้ส่งอาร์กิวเมนต์ไปยัง Time#prev_month และ Time#next_month (Commit)

  • เพิ่มลายเซ็นเมธอดเดียวกันสำหรับ Time#prev_year และ Time#next_year ให้เหมือนกับ Date#prev_year และ Date#next_year อนุญาตให้ส่งอาร์กิวเมนต์ไปยัง Time#prev_year และ Time#next_year (Commit)

  • แก้ไขการสนับสนุนอะครอนิมใน humanize (Commit)

  • อนุญาตให้ใช้ Range#include? ในช่วง TWZ (Pull Request)

  • แคช: เปิดใช้งานการบีบอัดโดยค่าเริ่มต้นสำหรับค่าที่มีขนาดมากกว่า 1kB (Pull Request)

  • Redis cache store (Pull Request, Pull Request)

  • จัดการข้อผิดพลาด TZInfo::AmbiguousTime (Pull Request)

  • MemCacheStore: สนับสนุนการหมดอายุของตัวนับ (Commit)

  • ทำให้ ActiveSupport::TimeZone.all ส่งคืนเฉพาะเขตเวลาที่อยู่ใน ActiveSupport::TimeZone::MAPPING (Pull Request)

  • เปลี่ยนพฤติกรรมเริ่มต้นของ ActiveSupport::SecurityUtils.secure_compare เพื่อไม่ให้รั่วไหลข้อมูลความยาวแม้แต่สำหรับสตริงที่มีความยาวแปรผัน แก้ชื่อ ActiveSupport::SecurityUtils.secure_compare เดิมเป็น fixed_length_secure_compare และเริ่มเรียก ArgumentError ในกรณีที่ความยาวของสตริงที่ส่งผ่านไม่ตรงกัน (Pull Request)

  • ใช้ SHA-1 เพื่อสร้างดิจิตอลเซ็นต์ที่ไม่เป็นข้อมูลที่สำคัญ เช่น ETag header (Pull Request, Pull Request)

  • assert_changes จะตรวจสอบเสมอว่านิพจน์เปลี่ยนแปลง ไม่ว่าจะมีการระบุ from: และ to: อย่างไรก็ตาม (Pull Request)

  • เพิ่มการตรวจสอบการเขียน read_multi ใน ActiveSupport::Cache::Store (Pull Request)

  • สนับสนุนการใช้แฮชเป็นอาร์กิวเมนต์แรกใน assert_difference นี้ช่วยให้ระบุความแตกต่างทางตัวเลขหลายอย่างในการตรวจสอบเดียว (Pull Request)

  • การแคช: MemCache และ Redis read_multi และ fetch_multi ทำให้เรียกจากแคชในหน่วยความจำในเครื่องก่อนที่จะเรียกจากแหล่งข้อมูลหลัง (Commit)

11 Active Job

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

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

  • อนุญาตให้ส่งบล็อกไปยัง ActiveJob::Base.discard_on เพื่ออนุญาตให้ปรับแต่งการจัดการงานที่ถูกละทิ้ง (Pull Request)

12 Ruby on Rails Guides

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

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

13 เครดิต

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

ข้อเสนอแนะ

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

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

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

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

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