1 การอัปเกรดไปยัง Rails 4.1
หากคุณกำลังอัปเกรดแอปพลิเคชันที่มีอยู่อยู่ ควรมีการทดสอบที่ดีก่อนที่จะเริ่มต้น คุณควรอัปเกรดเป็น Rails 4.0 ก่อนหากคุณยังไม่ได้ และตรวจสอบให้แน่ใจว่าแอปพลิเคชันของคุณยังทำงานตามที่คาดหวังก่อนที่จะพยายามอัปเดตเป็น Rails 4.1 มีรายการสิ่งที่ควรระวังเมื่ออัปเกรดใน การอัปเกรด Ruby on Rails คู่มือ
2 คุณสมบัติหลัก
2.1 Spring Application Preloader
Spring เป็นตัวโหลดล่วงหน้าของแอปพลิเคชัน Rails มันช่วยเร่งความเร็วในการพัฒนาโดยการเก็บแอปพลิเคชันของคุณทำงานในพื้นหลังเพื่อให้คุณไม่ต้องบูตแอปพลิเคชันทุกครั้งที่คุณเรียกใช้การทดสอบ งาน rake หรือการย้ายข้อมูล
แอปพลิเคชัน Rails 4.1 ใหม่จะมี "springified" binstubs ในการจัดส่ง นั่นหมายความว่า bin/rails
และ bin/rake
จะใช้ประโยชน์จากการโหลดล่วงหน้าแวดล้อม spring โดยอัตโนมัติ
การเรียกใช้งานงาน rake:
$ bin/rake test:models
การเรียกใช้คำสั่ง Rails:
$ bin/rails console
การตรวจสอบ Spring:
$ bin/spring status
Spring is running:
1182 spring server | my_app | started 29 mins ago
3656 spring app | my_app | started 23 secs ago | test mode
3746 spring app | my_app | started 10 secs ago | development mode
ดูที่ Spring README เพื่อดูคุณสมบัติที่มีอยู่ทั้งหมด
ดูที่ การอัปเกรด Ruby on Rails คู่มือเพื่อดูวิธีการย้ายแอปพลิเคชันที่มีอยู่ให้ใช้คุณสมบัตินี้
2.2 config/secrets.yml
Rails 4.1 สร้างไฟล์ secrets.yml
ใหม่ในโฟลเดอร์ config
โดยค่าเริ่มต้นไฟล์นี้จะมี secret_key_base
ของแอปพลิเคชัน แต่ยังสามารถใช้เก็บความลับอื่นๆ เช่น คีย์การเข้าถึงสำหรับ API ภายนอกได้
ความลับที่เพิ่มเข้าไปในไฟล์นี้สามารถเข้าถึงได้ผ่าน Rails.application.secrets
ตัวอย่างเช่น ด้วย config/secrets.yml
ต่อไปนี้:
development:
secret_key_base: 3b7cd727ee24e8444053437c36cc66c3
some_api_key: SOMEKEY
Rails.application.secrets.some_api_key
จะคืนค่า SOMEKEY
ในสภาพแวดล้อมการพัฒนา
ดูเอกสาร Upgrading Ruby on Rails เพื่อดูวิธีการย้ายแอปพลิเคชันที่มีอยู่เพื่อใช้คุณสมบัตินี้
2.3 Action Pack Variants
เราต้องการแสดงเทมเพลต HTML/JSON/XML ที่แตกต่างกันสำหรับโทรศัพท์มือถือ แท็บเล็ต และเบราว์เซอร์เดสก์ท็อป การใช้ Variant จะทำให้ง่ายขึ้น
Variant ของคำขอเป็นการพิเศษของรูปแบบคำขอ เช่น :tablet
, :phone
, หรือ :desktop
คุณสามารถตั้งค่า Variant ใน before_action
:
request.variant = :tablet if request.user_agent =~ /iPad/
ตอบสนองต่อ Variant ในแอคชันเหมือนตอบสนองต่อรูปแบบ:
respond_to do |format|
format.html do |html|
html.tablet # แสดง app/views/projects/show.html+tablet.erb
html.phone { extra_setup; render ... }
end
end
ให้เตรียมเทมเพลตแยกต่างหากสำหรับแต่ละรูปแบบและ Variant:
app/views/projects/show.html.erb
app/views/projects/show.html+tablet.erb
app/views/projects/show.html+phone.erb
คุณยังสามารถทำให้การกำหนด Variant ง่ายขึ้นได้โดยใช้ไวยากรณ์แบบอินไลน์:
respond_to do |format|
format.js { render "trash" }
format.html.phone { redirect_to progress_path }
format.html.none { render "trash" }
end
2.4 Action Mailer Previews
Action Mailer previews ให้วิธีการดูว่าอีเมลดูยังไงโดยการเข้าชม URL พิเศษที่แสดงอีเมล
คุณสร้างคลาส preview ซึ่งเมธอดของมันจะคืนค่าออบเจกต์เมลที่คุณต้องการตรวจสอบ:
class NotifierPreview < ActionMailer::Preview
def welcome
Notifier.welcome(User.first)
end
end
Preview สามารถใช้ได้ที่ http://localhost:3000/rails/mailers/notifier/welcome, และรายการทั้งหมดที่ http://localhost:3000/rails/mailers
ตามค่าเริ่มต้น คลาส preview จะอยู่ใน test/mailers/previews
สามารถกำหนดค่าได้โดยใช้ตัวเลือก preview_path
ดูเอกสาร นี้ สำหรับข้อมูลเพิ่มเติม
2.5 Active Record enums
ประกาศแอตทริบิวต์ enum ที่ค่าที่เก็บในฐานข้อมูลเป็นจำนวนเต็ม แต่สามารถค้นหาด้วยชื่อได้
class Conversation < ActiveRecord::Base
enum status: [ :active, :archived ]
end
conversation.archived!
conversation.active? # => false
conversation.status # => "archived"
Conversation.archived # => Relation สำหรับ Conversations ทั้งหมดที่ถูกเก็บเป็น archived
Conversation.statuses # => { "active" => 0, "archived" => 1 }
ดูเอกสารที่ นี่ เพื่อข้อมูลเพิ่มเติม
2.6 Message Verifiers
Message verifiers สามารถใช้สร้างและตรวจสอบข้อความที่ถูกลงลายมือได้ สิ่งนี้มีประโยชน์ในการขนส่งข้อมูลที่เป็นข้อมูลที่สำคัญเช่นโทเค็น remember-me และเพื่อน
เมธอด Rails.application.message_verifier
จะส่งคืนตัวตรวจสอบข้อความใหม่ที่ลงลายมือข้อความด้วยคีย์ที่ได้มาจาก secret_key_base และชื่อตัวตรวจสอบข้อความที่กำหนด:
signed_token = Rails.application.message_verifier(:remember_me).generate(token)
Rails.application.message_verifier(:remember_me).verify(signed_token) # => token
Rails.application.message_verifier(:remember_me).verify(tampered_token)
# raises ActiveSupport::MessageVerifier::InvalidSignature
2.7 Module#concerning
วิธีที่เป็นธรรมชาติและไม่ซับซ้อนในการแยกความรับผิดชอบภายในคลาส:
class Todo < ActiveRecord::Base
concerning :EventTracking do
included do
has_many :events
end
def latest_event
# ...
end
private
def some_internal_method
# ...
end
end
end
ตัวอย่างนี้เทียบเท่ากับการกำหนดโมดูล EventTracking
ในบรรทัดเดียวกัน แล้วขยายมันด้วย ActiveSupport::Concern
และผสมมันเข้ากับคลาส Todo
ดูเอกสารที่ นี่ เพื่อข้อมูลเพิ่มเติมและวิธีการใช้งานที่ตั้งใจ
2.8 การป้องกัน CSRF จากแท็ก <script>
จากระยะไกล
การป้องกันการโจมตี CSRF ตอนนี้รองรับการร้องขอ GET ที่มีการตอบกลับด้วย JavaScript เช่นกัน นั่นหมายความว่าเว็บไซต์บุคคลที่สามจะไม่สามารถอ้างอิง URL ของ JavaScript ของคุณและพยายามเรียกใช้เพื่อดึงข้อมูลที่สำคัญได้
นี่หมายความว่าการทดสอบใด ๆ ที่เรียกใช้ URL .js
ของคุณจะล้มเหลวการป้องกัน CSRF ยกเว้นว่าจะใช้ xhr
อัพเกรดการทดสอบของคุณให้ชัดเจนเกี่ยวกับการคาดหวัง XmlHttpRequests แทนการใช้ post :create, format: :js
ให้เปลี่ยนเป็น xhr :post, :create, format: :js
3 Railties
โปรดอ้างอิงที่ Changelog สำหรับการเปลี่ยนแปลงที่ละเอียด
3.1 การลบ
ลบงาน rake
update:application_controller
ลบ
Rails.application.railties.engines
ที่ถูกยกเลิกลบ
threadsafe!
ที่ถูกยกเลิกจาก Rails Configลบ
ActiveRecord::Generators::ActiveModel#update_attributes
ที่ถูกยกเลิกแล้วแทนด้วยActiveRecord::Generators::ActiveModel#update
ลบตัวเลือก
config.whiny_nils
ที่ถูกยกเลิกลบงาน rake ที่ถูกยกเลิกสำหรับการเรียกใช้ทดสอบ:
rake test:uncommitted
และrake test:recent
3.2 การเปลี่ยนแปลงที่สำคัญ
- Spring application preloader ติดตั้งโดยค่าเริ่มต้นสำหรับแอปพลิเคชันใหม่ มันใช้กลุ่มการพัฒนาของ
Gemfile
ดังนั้นจะไม่ถูกติดตั้งในโหมดการใช้งานจริง (Pull Request) BACKTRACE
ตัวแปรสภาพแวดล้อมเพื่อแสดง backtrace ที่ไม่ได้กรองสำหรับการล้มเหลวในการทดสอบ (Commit)เปิดเผย
MiddlewareStack#unshift
เพื่อกำหนดค่าสภาพแวดล้อม (Pull Request)เพิ่มเมธอด
Application#message_verifier
เพื่อคืนตัวตรวจสอบข้อความ (Pull Request)ไฟล์
test_help.rb
ที่ต้องการโดยค่าเริ่มต้นของเครื่องมือช่วยทดสอบที่สร้างขึ้นจะอัปเดตฐานข้อมูลทดสอบของคุณให้เป็นปัจจุบันกับdb/schema.rb
(หรือdb/structure.sql
) โดยการเรียกใช้งานซ้ำโครงสร้าง หากการโหลดซ้ำของโครงสร้างไม่สามารถแก้ไขปัญหาการเคลื่อนย้ายที่รอดำเนินการได้ จะเกิดข้อผิดพลาดขึ้น สามารถปิดการใช้งานได้ด้วยconfig.active_record.maintain_test_schema = false
(Pull Request)นำเข้า
Rails.gem_version
เป็นเมธอดที่สะดวกในการคืนค่าGem::Version.new(Rails.version)
เพื่อแนะนำวิธีการเปรียบเทียบเวอร์ชันที่เป็นที่เชื่อถือได้มากขึ้น (Pull Request)
4 Action Pack
โปรดอ้างอิงที่ Changelog สำหรับการเปลี่ยนแปลงที่ละเอียด
4.1 การลบ
ลบการสำรองที่ตกลงไว้สำหรับการทดสอบการรวมกันของแอปพลิเคชัน Rails ที่ถูกยกเลิก แทนที่ให้ตั้งค่า
ActionDispatch.test_app
ลบการกำหนดค่า
page_cache_extension
ที่ถูกยกเลิกไว้ลบค่าคงที่ที่ถูกยกเลิกจาก Action Controller:
ถูกลบ | ผู้สืบทอด |
---|---|
ActionController::AbstractRequest | ActionDispatch::Request |
ActionController::Request | ActionDispatch::Request |
ActionController::AbstractResponse | ActionDispatch::Response |
ActionController::Response | ActionDispatch::Response |
ActionController::Routing | ActionDispatch::Routing |
ActionController::Integration | ActionDispatch::Integration |
ActionController::IntegrationTest | ActionDispatch::IntegrationTest |
4.2 การเปลี่ยนแปลงที่สำคัญ
protect_from_forgery
ยังป้องกันแท็ก<script>
ข้ามต้นทางด้วย อัปเดตการทดสอบของคุณให้ใช้xhr :get, :foo, format: :js
แทนget :foo, format: :js
(Pull Request)#url_for
รับแอร์เรย์ที่มีตัวเลือกภายใน (Pull Request)เพิ่มเมธอด
session#fetch
ที่ทำงานเช่นเดียวกับ Hash#fetch แต่ค่าที่คืนค่าจะถูกบันทึกไว้ในเซสชันเสมอ (Pull Request)แยก Action View ออกจาก Action Pack อย่างสมบูรณ์ (Pull Request)
บันทึกคีย์ที่ได้รับผลกระทบจาก deep munge (Pull Request)
ตัวเลือกการกำหนดค่าใหม่
config.action_dispatch.perform_deep_munge
เพื่อไม่ใช้ "deep munging" ของพารามิเตอร์ที่ใช้แก้ไขช่องโหว่ความปลอดภัย CVE-2013-0155 (Pull Request)ตัวเลือกการกำหนดค่าใหม่
config.action_dispatch.cookies_serializer
เพื่อระบุตัวแปรที่ใช้สำหรับการลงลายมือและเข้ารหัสคุกกี้ (Pull Requests 1, 2 / รายละเอียดเพิ่มเติม)เพิ่ม
render :plain
,render :html
และrender :body
(Pull Request / รายละเอียดเพิ่มเติม)
5 Action Mailer
โปรดอ้างอิงที่ Changelog สำหรับการเปลี่ยนแปลงที่ละเอียด
5.1 การเปลี่ยนแปลงที่สำคัญ
เพิ่มฟีเจอร์การแสดงตัวอย่างเมลล์ (mailer previews) โดยใช้ gem จาก 37 Signals mail_view (Commit)
เพิ่มการตรวจวัดการสร้างข้อความใน Action Mailer โดยเขียนเวลาที่ใช้ในการสร้างข้อความลงใน log (Pull Request)
6 Active Record
โปรดอ้างอิงที่ Changelog สำหรับการเปลี่ยนแปลงที่ละเอียด
6.1 การลบออก
ลบการใช้ nil-passing ที่ถูกยกเลิกไปจากเมธอด
SchemaCache
ต่อไปนี้:primary_keys
,tables
,columns
และcolumns_hash
ลบการใช้ block filter ที่ถูกยกเลิกไปจาก
ActiveRecord::Migrator#migrate
ลบการใช้ String constructor ที่ถูกยกเลิกไปจาก
ActiveRecord::Migrator
ลบการใช้
scope
ที่ถูกยกเลิกไปโดยไม่ส่ง callable objectลบการใช้
transaction_joinable=
ที่ถูกยกเลิกไปและใช้begin_transaction
พร้อมกับตัวเลือก:joinable
แทนลบการใช้
decrement_open_transactions
ที่ถูกยกเลิกไปลบการใช้
increment_open_transactions
ที่ถูกยกเลิกไปลบเมธอด
PostgreSQLAdapter#outside_transaction?
ที่ถูกยกเลิกไป คุณสามารถใช้#transaction_open?
แทนลบ
ActiveRecord::Fixtures.find_table_name
ที่ถูกยกเลิกไปและใช้ActiveRecord::Fixtures.default_fixture_model_name
แทนลบ
columns_for_remove
ที่ถูกยกเลิกไปจากSchemaStatements
ลบ
SchemaStatements#distinct
ที่ถูกยกเลิกไปย้าย
ActiveRecord::TestCase
ที่ถูกยกเลิกไปเข้าไปในชุดทดสอบของ Rails คลาสนี้ไม่ได้เป็นสาธารณะและใช้เฉพาะสำหรับการทดสอบภายใน Rails เท่านั้นลบการสนับสนุนตัวเลือก
:restrict
ที่ถูกยกเลิกไปสำหรับ:dependent
ในการเชื่อมโยงลบการสนับสนุน
:delete_sql
,:insert_sql
,:finder_sql
และ:counter_sql
ที่ถูกยกเลิกไปสำหรับตัวเลือกในการเชื่อมโยงลบเมธอด
type_cast_code
ที่ถูกยกเลิกไปจาก Columnลบเมธอด
ActiveRecord::Base#connection
ที่ถูกยกเลิกไป โปรดตรวจสอบการเข้าถึงผ่านคลาสลบคำเตือนการถูกยกเลิกสำหรับ
auto_explain_threshold_in_seconds
ลบตัวเลือก
:distinct
ที่ถูกยกเลิกไปจากRelation#count
ลบเมธอดที่ถูกยกเลิกไป
partial_updates
,partial_updates?
และpartial_updates=
ลบเมธอดที่ถูกยกเลิกไป
scoped
ลบเมธอดที่ถูกยกเลิกไป
default_scopes?
ลบการอ้างอิงการเชื่อมต่อแบบอัตโนมัติที่ถูกยกเลิกไปในเวอร์ชัน 4.0
ลบ
activerecord-deprecated_finders
เป็น dependency โปรดดู README ของ gem สำหรับข้อมูลเพิ่มเติมลบการใช้
implicit_readonly
โปรดใช้เมธอดreadonly
โดยชัดเจนเพื่อทำเครื่องหมายว่าเร็คคอร์ดเป็นreadonly
(Pull Request)การเลิกใช้งาน
เลิกใช้งานเมธอด
quoted_locking_column
ที่ไม่ได้ใช้ที่ใดที่นั่นเลิกใช้งาน
ConnectionAdapters::SchemaStatements#distinct
เนื่องจากไม่ได้ใช้ในภายในอีกต่อไป (Pull Request)เลิกใช้งานงาน
rake db:test:*
เนื่องจากฐานข้อมูลทดสอบถูกบำรุงรักษาโดยอัตโนมัติแล้ว ดูรายละเอียดเพิ่มเติมในเอกสารปล่อย railties (Pull Request)เลิกใช้งาน
ActiveRecord::Base.symbolized_base_class
และActiveRecord::Base.symbolized_sti_name
ที่ไม่ได้ใช้งานและไม่มีการแทนที่ Commit
6.2 การเปลี่ยนแปลงที่สำคัญ
- สคอปเริ่มต้นไม่ได้ถูกแทนที่โดยเงื่อนไขที่เชื่อมต่อ
ก่อนการเปลี่ยนแปลงนี้เมื่อคุณกำหนด default_scope
ในโมเดล มันจะถูกแทนที่โดยเงื่อนไขที่เชื่อมต่อในฟิลด์เดียวกัน ตอนนี้มันถูกผสมเข้ากับสคอปอื่น ๆ เช่นเดียวกับสคอปอื่น ๆ รายละเอียดเพิ่มเติม
เพิ่ม
ActiveRecord::Base.to_param
เพื่อให้สามารถใช้งาน URL ที่สวยงามได้ที่ได้รับมาจากแอตทริบิวต์หรือเมธอดของโมเดล (Pull Request)เพิ่ม
ActiveRecord::Base.no_touching
ซึ่งช่วยให้สามารถละเว้นการสัมผัสบนโมเดลได้ (Pull Request)รวมการแปลงชนิดของบูลีนสำหรับ
MysqlAdapter
และMysql2Adapter
เมธอดtype_cast
จะคืนค่า1
สำหรับtrue
และ0
สำหรับfalse
(Pull Request).unscope
ตอนนี้จะลบเงื่อนไขที่ระบุในdefault_scope
(Commit)เพิ่ม
ActiveRecord::QueryMethods#rewhere
ซึ่งจะเขียนทับเงื่อนไข where ที่มีอยู่แล้ว โดยระบุชื่อ (Commit)ขยาย
ActiveRecord::Base#cache_key
เพื่อรับค่าแอตทริบิวต์เวลาแบบไม่บังคับที่สูงสุด (Commit)เพิ่ม
ActiveRecord::Base#enum
เพื่อประกาศแอตทริบิวต์ enum ที่ค่าที่ได้จากฐานข้อมูลเป็นจำนวนเต็ม แต่สามารถค้นหาตามชื่อได้ (Commit)แปลงชนิดค่า JSON เมื่อเขียน เพื่อให้ค่าสอดคล้องกับการอ่านจากฐานข้อมูล (Pull Request)
แปลงชนิดค่า hstore เมื่อเขียน เพื่อให้ค่าสอดคล้องกับการอ่านจากฐานข้อมูล (Commit)
ทำให้
next_migration_number
เข้าถึงได้สำหรับตัวสร้างจากบุคคลที่สาม (Pull Request)เรียกใช้
update_attributes
จะส่งArgumentError
เมื่อได้รับอาร์กิวเมนต์nil
โดยเฉพาะอย่างยิ่ง จะส่งข้อผิดพลาดถ้าอาร์กิวเมนต์ที่ได้รับไม่ตอบสนองกับstringify_keys
(Pull Request)CollectionAssociation#first
/#last
(เช่นhas_many
) ใช้คิวรีที่ถูกจำกัดเพื่อดึงผลลัพธ์แทนที่จะโหลดคอลเลกชันทั้งหมด (Pull Request)inspect
ในคลาส Active Record model จะไม่เริ่มการเชื่อมต่อใหม่ นั่นหมายความว่าการเรียกใช้inspect
เมื่อไม่มีฐานข้อมูลจะไม่เกิดข้อผิดพลาด (Pull Request)ลบข้อจำกัดของคอลัมน์สำหรับ
count
ให้ฐานข้อมูลเกิดข้อผิดพลาดหาก SQL ไม่ถูกต้อง (Pull Request)Rails ตอนนี้สามารถตรวจหาสมาชิกที่เกี่ยวข้องกันได้อัตโนมัติแล้ว หากคุณไม่ตั้งค่า
:inverse_of
ในการเชื่อมโยง Active Record จะคาดเดาสมาชิกที่เกี่ยวข้องกันโดยใช้เทคนิคการคาดเดา (Pull Request)จัดการกับแอลิเอสแอลิเอสที่ถูกตั้งชื่อใหม่ใน ActiveRecord::Relation เมื่อใช้คีย์แบบสัญลักษณ์ ActiveRecord จะแปลงชื่อแอลิเอสที่ถูกตั้งชื่อใหม่เป็นชื่อคอลัมน์จริงที่ใช้ในฐานข้อมูล (Pull Request)
ERB ในไฟล์ fixture จะไม่ถูกประเมินในบริบทของอ็อบเจ็กต์หลักอีกต่อไป เมธอดช่วยเหลือที่ใช้ใน fixture หลายรูปแบบควรถูกกำหนดในโมดูลที่รวมอยู่ใน
ActiveRecord::FixtureSet.context_class
(Pull Request)ไม่สร้างหรือลบฐานข้อมูลทดสอบหาก RAILS_ENV ถูกระบุโดยชัดเจน (Pull Request)
Relation
ไม่มีเมธอด mutator เช่น#map!
และ#delete_if
แปลงเป็นArray
โดยเรียกใช้#to_a
ก่อนใช้เมธอดเหล่านี้ (Pull Request)find_in_batches
,find_each
,Result#each
และEnumerable#index_by
ตอนนี้ส่งคืนEnumerator
ที่สามารถคำนวณขนาดได้ (Pull Request)scope
,enum
และ Associations ตอนนี้เกิดข้อขัดแย้งเมื่อมีชื่อที่ขัดแย้งกันที่เรียกว่า "อันตราย" (Pull Request, Pull Request)เมธอด
second
ถึงfifth
ทำหน้าที่เหมือนกับตัวค้นหาfirst
(Pull Request)ทำให้
touch
เรียกใช้after_commit
และafter_rollback
callbacks (Pull Request)เปิดใช้งานดัชนีบางส่วนสำหรับ
sqlite >= 3.8.0
(Pull Request)ทำให้
change_column_null
สามารถย้อนกลับได้ (Commit)เพิ่มตัวแปรเพื่อปิดการสร้าง schema หลังจากการโยกย้าย ค่าเริ่มต้นในสภาพแวดล้อมการใช้งานจริงสำหรับแอปพลิเคชันใหม่จะถูกตั้งค่าเป็น
false
(Pull Request)
7 Active Model
โปรดอ้างอิงที่ Changelog สำหรับการเปลี่ยนแปลงที่ละเอียด
7.1 การเลิกใช้
เลิกใช้
Validator#setup
ควรทำเองในคอนสตรักเตอร์ของ validator (Commit)การเปลี่ยนแปลงที่สำคัญ
เพิ่มเมธอด API ใหม่
reset_changes
และchanges_applied
ในActiveModel::Dirty
ที่ควบคุมสถานะการเปลี่ยนแปลงสามารถระบุ context หลายรายการเมื่อกำหนดการตรวจสอบความถูกต้อง (Pull Request)
attribute_changed?
ตอนนี้ยอมรับแฮชเพื่อตรวจสอบว่ามีการเปลี่ยนแปลงของ attribute:from
และ/หรือ:to
ค่าที่กำหนด (Pull Request)
8 Active Support
โปรดอ้างอิงที่ Changelog สำหรับรายละเอียดการเปลี่ยนแปลง
8.1 การลบ
ลบความขึ้นอยู่กับ
MultiJSON
ที่เกี่ยวข้อง ด้วยผลที่ActiveSupport::JSON.decode
ไม่ยอมรับตัวเลือกแฮชสำหรับMultiJSON
อีกต่อไป (Pull Request / รายละเอียดเพิ่มเติม)ลบการสนับสนุนสำหรับการเข้ารหัส
encode_json
ที่ใช้สำหรับการเข้ารหัสวัตถุที่กำหนดเองเป็น JSON คุณลักษณะนี้ถูกแยกออกเป็น activesupport-json_encoder gem (Pull Request ที่เกี่ยวข้อง / รายละเอียดเพิ่มเติม)ลบ
ActiveSupport::JSON::Variable
ที่ถูกยกเลิกโดยไม่มีการแทนที่ลบการขยายความสามารถที่ถูกยกเลิก
String#encoding_aware?
(core_ext/string/encoding
)ลบการขยายความสามารถที่ถูกยกเลิก
Module#local_constant_names
เพื่อใช้Module#local_constants
แทนลบการขยายความสามารถที่ถูกยกเลิก
DateTime.local_offset
เพื่อใช้DateTime.civil_from_format
แทนลบการขยายความสามารถที่ถูกยกเลิก
Logger
(core_ext/logger.rb
)ลบการขยายความสามารถที่ถูกยกเลิก
Time#time_with_datetime_fallback
,Time#utc_time
และTime#local_time
เพื่อใช้Time#utc
และTime#local
แทนลบการขยายความสามารถที่ถูกยกเลิก
Hash#diff
โดยไม่มีการแทนที่ลบการขยายความสามารถที่ถูกยกเลิก
Date#to_time_in_current_zone
เพื่อใช้Date#in_time_zone
แทนลบการขยายความสามารถที่ถูกยกเลิก
Proc#bind
โดยไม่มีการแทนที่ลบการขยายความสามารถที่ถูกยกเลิก
Array#uniq_by
และArray#uniq_by!
ใช้Array#uniq
และArray#uniq!
แทนลบ
ActiveSupport::BasicObject
ที่ถูกยกเลิกใช้ActiveSupport::ProxyObject
แทนลบ
BufferedLogger
ที่ถูกยกเลิกใช้ActiveSupport::Logger
แทนลบเมธอด
assert_present
และassert_blank
ใช้assert object.blank?
และassert object.present?
แทนลบเมธอด
#filter
สำหรับวัตถุตัวกรอง ใช้เมธอดที่เกี่ยวข้องแทน (เช่น#before
สำหรับตัวกรองก่อน)ลบการเปลี่ยนแปลง 'cow' => 'kine' ที่ไม่เป็นไปตามกฎเกณฑ์จากค่าเริ่มต้น inflections. (Commit)
8.2 การเลิกใช้
เลิกใช้
Numeric#{ago,until,since,from_now}
ผู้ใช้ควร แปลงค่าเป็น AS::Duration โดยชัดเจน เช่น5.ago
=>5.seconds.ago
(Pull Request)เลิกใช้เส้นทางการต้องการ
active_support/core_ext/object/to_json
ให้ต้องการactive_support/core_ext/object/json
แทน (Pull Request)เลิกใช้
ActiveSupport::JSON::Encoding::CircularReferenceError
คุณลักษณะนี้ ถูกแยกออกเป็น activesupport-json_encoder gem (Pull Request / รายละเอียดเพิ่มเติม)ตัวเลือก
ActiveSupport.encode_big_decimal_as_string
ที่ถูกยกเลิก คุณลักษณะนี้ได้ถูกแยกออกมาเป็นแพ็คเกจ activesupport-json_encoder gem. (Pull Request / รายละเอียดเพิ่มเติม)ยกเลิกการใช้งาน
BigDecimal
ที่กำหนดเองในการแปลงข้อมูล. (Pull Request)
8.3 การเปลี่ยนแปลงที่สำคัญ
ได้เขียนใหม่ JSON encoder ของ
ActiveSupport
เพื่อใช้ประโยชน์จาก JSON gem แทนที่จะทำการเข้ารหัสเองในรูปแบบ pure-Ruby. (Pull Request / รายละเอียดเพิ่มเติม)ปรับปรุงความเข้ากันได้กับ JSON gem. (Pull Request / รายละเอียดเพิ่มเติม)
เพิ่ม
ActiveSupport::Testing::TimeHelpers#travel
และ#travel_to
. เมธอดเหล่านี้เปลี่ยนเวลาปัจจุบันเป็นเวลาหรือระยะเวลาที่กำหนดโดยการสแต็บTime.now
และDate.today
.เพิ่ม
ActiveSupport::Testing::TimeHelpers#travel_back
. เมธอดนี้จะคืนค่าเวลาปัจจุบันกลับสู่สถานะเดิมโดยการลบสแต็บที่เพิ่มโดยtravel
และtravel_to
. (Pull Request)เพิ่ม
Numeric#in_milliseconds
, เช่น1.hour.in_milliseconds
, เพื่อให้สามารถนำไปใช้กับฟังก์ชัน JavaScript เช่นgetTime()
ได้. (Commit)เพิ่ม
Date#middle_of_day
,DateTime#middle_of_day
และTime#middle_of_day
เป็นเมธอด และเพิ่มmidday
,noon
,at_midday
,at_noon
และat_middle_of_day
เป็นตัวย่อ. (Pull Request)เพิ่ม
Date#all_week/month/quarter/year
เพื่อสร้างช่วงวันที่. (Pull Request)เพิ่ม
Time.zone.yesterday
และTime.zone.tomorrow
. (Pull Request)เพิ่ม
String#remove(pattern)
เป็นการย่อหน้าสั้น ๆ สำหรับรูปแบบที่พบบ่อยของString#gsub(pattern,'')
. (Commit)เพิ่ม
Hash#compact
และHash#compact!
เพื่อลบรายการที่มีค่าเป็น nil ออกจาก hash. (Pull Request)blank?
และpresent?
จะคืนค่าเป็น singletons. (Commit)ตั้งค่า
I18n.enforce_available_locales
ใหม่เป็นtrue
ที่เป็นค่าเริ่มต้น ซึ่งหมายความว่าI18n
จะตรวจสอบให้แน่ใจว่าทุกโลเคลที่ส่งผ่านไปยังมันต้องถูกประกาศในรายการavailable_locales
. (Pull Request)เพิ่ม
Module#concerning
: วิธีที่เป็นธรรมชาติและไม่ซับซ้อนในการแยกความรับผิดชอบภายในคลาส. (Commit)เพิ่ม
Object#presence_in
เพื่อให้ง่ายต่อการเพิ่มค่าในรายการที่อนุญาต. (Commit)
9 เครดิต
ดูรายชื่อเต็มของผู้มีส่วนร่วมใน Rails ได้ที่ รายชื่อผู้มีส่วนร่วมทั้งหมดใน Rails สำหรับผู้ที่ใช้เวลาหลายชั่วโมงในการสร้าง Rails เป็นเฟรมเวิร์คที่เสถียรและทนทาน ยินดีด้วยทุกคน.
ข้อเสนอแนะ
คุณสามารถช่วยปรับปรุงคุณภาพของคู่มือนี้ได้
กรุณาช่วยเพิ่มเติมหากพบข้อผิดพลาดหรือข้อผิดพลาดทางความจริง เพื่อเริ่มต้นคุณสามารถอ่านส่วน การสนับสนุนเอกสาร ของเราได้
คุณอาจพบเนื้อหาที่ไม่สมบูรณ์หรือเนื้อหาที่ไม่ได้อัปเดต กรุณาเพิ่มเอกสารที่ขาดหายไปสำหรับเนื้อหาหลัก โปรดตรวจสอบ Edge Guides ก่อนเพื่อตรวจสอบ ว่าปัญหาได้รับการแก้ไขหรือไม่ในสาขาหลัก ตรวจสอบ คู่มือแนวทาง Ruby on Rails เพื่อดูรูปแบบและกฎเกณฑ์
หากคุณพบข้อผิดพลาดแต่ไม่สามารถแก้ไขได้เอง กรุณา เปิดปัญหา.
และสุดท้าย การสนทนาใด ๆ เกี่ยวกับ Ruby on Rails เอกสารยินดีต้อนรับที่สุดใน เว็บบอร์ดอย่างเป็นทางการของ Ruby on Rails.