1 การอัพเกรดไปยัง Rails 5.2
หากคุณกำลังอัพเกรดแอปพลิเคชันที่มีอยู่ ควรมีการทดสอบที่ดีก่อนที่จะเริ่มต้น คุณควรอัพเกรดเป็น Rails 5.1 ก่อนหากคุณยังไม่ได้ทำ และตรวจสอบให้แน่ใจว่าแอปพลิเคชันของคุณยังทำงานตามที่คาดหวังก่อนที่จะพยายามอัพเดตเป็น Rails 5.2 มีรายการสิ่งที่ควรระมัดระวังเมื่ออัพเกรดใน การอัพเกรด Ruby on Rails คู่มือ
2 คุณสมบัติหลัก
2.1 Active Storage
Active Storage ช่วยให้สามารถอัปโหลดไฟล์ไปยังบริการจัดเก็บในคลาวด์ เช่น Amazon S3, Google Cloud Storage, หรือ Microsoft Azure Storage และแนบไฟล์เหล่านั้นกับอ็อบเจกต์ Active Record มีบริการเก็บข้อมูลบนดิสก์ในเครื่องสำหรับการพัฒนาและการทดสอบ และรองรับการสำรองข้อมูลและการย้ายไฟล์ไปยังบริการย่อย ๆ คุณสามารถอ่านข้อมูลเพิ่มเติมเกี่ยวกับ Active Storage ใน ภาพรวม Active Storage คู่มือ
2.2 Redis Cache Store
Rails 5.2 มาพร้อมกับ Redis cache store ที่มีอยู่ในตัว คุณสามารถอ่านข้อมูลเพิ่มเติมเกี่ยวกับนี้ใน การใช้งานแคชด้วย Rails: ภาพรวม คู่มือ
2.3 HTTP/2 Early Hints
Rails 5.2 รองรับ HTTP/2 Early Hints
ในการเริ่มต้นเซิร์ฟเวอร์ด้วย Early Hints ให้ส่ง --early-hints
ไปยัง bin/rails server
2.4 Credentials
เพิ่มไฟล์ config/credentials.yml.enc
เพื่อเก็บความลับของแอปพลิเคชันในโหมดการใช้งานจริง สามารถบันทึกข้อมูลการรับรองความถูกต้องสำหรับบริการบุคคลที่สามในเก็บรักษาที่เข้ารหัสด้วยคีย์ในไฟล์ config/master.key
หรือตัวแปรสภาพแวดล้อม RAILS_MASTER_KEY
สิ่งนี้จะเป็นการแทนที่ Rails.application.secrets
และข้อมูลรหัสผ่านที่เข้ารหัสใน Rails 5.1 อีกทั้ง Rails 5.2
เปิด API ใน Credentials
ดังนั้นคุณสามารถจัดการกับการกำหนดค่าที่เข้ารหัสอื่น ๆ ได้อย่างง่ายดาย รวมถึงคีย์และไฟล์ที่เข้ารหัส คุณสามารถอ่านข้อมูลเพิ่มเติมเกี่ยวกับนี้ใน
การรักษาความปลอดภัยในแอปพลิเคชัน Rails
คู่มือ
2.5 นโยบายความปลอดภัยของเนื้อหา
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 การเปลี่ยนแปลงที่สำคัญ
- เพิ่ม Threading and Code Execution in Rails Guide (Pull Request)
- เพิ่ม Active Storage Overview Guide. (Pull Request)
13 เครดิต
ดู รายชื่อผู้มีส่วนร่วมทั้งหมดใน Rails สำหรับผู้ที่ใช้เวลาหลายชั่วโมงในการสร้าง Rails เป็นเฟรมเวิร์กที่เสถียรและแข็งแรง ยินดีด้วยทุกคน.
ข้อเสนอแนะ
คุณสามารถช่วยปรับปรุงคุณภาพของคู่มือนี้ได้
กรุณาช่วยเพิ่มเติมหากพบข้อผิดพลาดหรือข้อผิดพลาดทางความจริง เพื่อเริ่มต้นคุณสามารถอ่านส่วน การสนับสนุนเอกสาร ของเราได้
คุณอาจพบเนื้อหาที่ไม่สมบูรณ์หรือเนื้อหาที่ไม่ได้อัปเดต กรุณาเพิ่มเอกสารที่ขาดหายไปสำหรับเนื้อหาหลัก โปรดตรวจสอบ Edge Guides ก่อนเพื่อตรวจสอบ ว่าปัญหาได้รับการแก้ไขหรือไม่ในสาขาหลัก ตรวจสอบ คู่มือแนวทาง Ruby on Rails เพื่อดูรูปแบบและกฎเกณฑ์
หากคุณพบข้อผิดพลาดแต่ไม่สามารถแก้ไขได้เอง กรุณา เปิดปัญหา.
และสุดท้าย การสนทนาใด ๆ เกี่ยวกับ Ruby on Rails เอกสารยินดีต้อนรับที่สุดใน เว็บบอร์ดอย่างเป็นทางการของ Ruby on Rails.