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

เรื่องสำคัญใน Rails 5.0:

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

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

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

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

2.1 Action Cable

Action Cable เป็นเฟรมเวิร์กใหม่ใน Rails 5.0 มันรวม WebSockets ได้อย่างราบรื่นกับแอปพลิเคชัน Rails ของคุณ

Action Cable ช่วยให้คุณสามารถเขียนคุณสมบัติแบบเรียลไทม์ในภาษา Ruby ในรูปแบบและรูปแบบเดียวกับส่วนอื่น ๆ ของแอปพลิเคชัน Rails ของคุณ ในขณะเดียวกันยังมีประสิทธิภาพและมีความสามารถในการขยายขนาด มันเป็นเฟรมเวิร์กแบบ full-stack ที่ให้บริการทั้งเฟรมเวิร์กฝั่งไคลเอนต์และเฟรมเวิร์กฝั่งเซิร์ฟเวอร์ในภาษา Ruby คุณสามารถเข้าถึงโมเดลโดเมนทั้งหมดของคุณที่เขียนด้วย Active Record หรือ ORM ที่คุณเลือก

ดูเอกสาร Action Cable Overview สำหรับข้อมูลเพิ่มเติม

2.2 แอปพลิเคชัน API

Rails สามารถใช้สร้างแอปพลิเคชัน API ที่มีขนาดเล็กลงได้แล้ว สิ่งนี้เป็นประโยชน์ในการสร้างและให้บริการ API ที่คล้ายกับ Twitter หรือ GitHub API ซึ่งสามารถใช้ในการให้บริการสู่สาธารณะและสำหรับแอปพลิเคชันที่กำหนดเองได้

คุณสามารถสร้างแอป Rails แบบ api ใหม่โดยใช้คำสั่ง:

$ rails new my_api --api

สิ่งที่จะทำ:

  • กำหนดค่าให้แอปพลิเคชันเริ่มต้นด้วยเซ็ตของมิดเดิลแวร์ที่จำกัดมากกว่าปกติ โดยเฉพาะอย่างยิ่งจะไม่รวมมิดเดิลแวร์ที่มีประโยชน์สำหรับแอปพลิเคชันเบราว์เซอร์ (เช่นการสนับสนุนคุกกี้) โดยค่าเริ่มต้น
  • ทำให้ ApplicationController สืบทอดจาก ActionController::API แทนที่จะสืบทอดจาก ActionController::Base เช่นเดียวกับมิดเดิลแวร์ นี้จะไม่รวมโมดูล Action Controller ที่ให้ฟังก์ชันที่ใช้งานโดยเฉพาะสำหรับแอปพลิเคชันเบราว์เซอร์
  • กำหนดค่าเจเนอเรเตอร์ให้ข้ามการสร้างวิว เฮลเปอร์ และแอสเซ็ตเมื่อคุณสร้างทรัพยากรใหม่

แอปพลิเคชันจะให้ฐานสำหรับ API ซึ่งจากนั้นสามารถ กำหนดค่าให้ดึงฟังก์ชัน เมื่อเหมาะสมสำหรับความต้องการของแอปพลิเคชัน

ดูเพิ่มเติมในเอกสาร การใช้ Rails สำหรับแอปพลิเคชัน API เท่านั้น

2.3 Active Record attributes API

กำหนดค่าแอตทริบิวต์ที่มีประเภทบนโมเดล จะแทนที่ประเภทของแอตทริบิวต์ที่มีอยู่ถ้าจำเป็น สิ่งนี้ช่วยควบคุมวิธีการแปลงค่าเป็นและจาก SQL เมื่อกำหนดให้กับโมเดล นอกจากนี้ยังเปลี่ยนพฤติกรรมของค่าที่ส่งผ่านไปยัง ActiveRecord::Base.where ซึ่งให้เราใช้วัตถุโดเมนของเราได้ในหลายส่วนของ Active Record โดยไม่ต้องพึ่งพารายละเอียดการดำเนินการหรือการแก้ไขโค้ด

บางสิ่งที่คุณสามารถทำได้ด้วยสิ่งนี้:

  • สามารถแทนที่ประเภทที่ Active Record ตรวจพบได้
  • สามารถกำหนดค่าเริ่มต้นได้เช่นกัน
  • แอตทริบิวต์ไม่จำเป็นต้องมีคอลัมน์ในฐานข้อมูล
# db/schema.rb
create_table :store_listings, force: true do |t|
  t.decimal :price_in_cents
  t.string :my_string, default: "original default"
end
# app/models/store_listing.rb
class StoreListing < ActiveRecord::Base
end
store_listing = StoreListing.new(price_in_cents: '10.1')

# ก่อน
store_listing.price_in_cents # => BigDecimal.new(10.1)
StoreListing.new.my_string # => "original default"

class StoreListing < ActiveRecord::Base
  attribute :price_in_cents, :integer # ประเภทที่กำหนดเอง
  attribute :my_string, :string, default: "new default" # ค่าเริ่มต้น
  attribute :my_default_proc, :datetime, default: -> { Time.now } # ค่าเริ่มต้น
  attribute :field_without_db_column, :integer, array: true
end

# หลัง
store_listing.price_in_cents # => 10
StoreListing.new.my_string # => "new default"
StoreListing.new.my_default_proc # => 2015-05-30 11:04:48 -0600
model = StoreListing.new(field_without_db_column: ["1", "2", "3"])
model.attributes # => {field_without_db_column: [1, 2, 3]}

สร้างประเภทที่กำหนดเอง:

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

การค้นหา:

เมื่อเรียกใช้ ActiveRecord::Base.where จะใช้ประเภทที่กำหนดโดยคลาสโมเดลในการแปลงค่าเป็น SQL โดยเรียกใช้ serialize บนออบเจ็กต์ประเภทของคุณ

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

การตรวจสอบการเปลี่ยนแปลง:

ประเภทของแอตทริบิวต์สามารถเปลี่ยนวิธีการตรวจสอบการติดตามการเปลี่ยนแปลงได้

ดู เอกสาร สำหรับรายละเอียดเพิ่มเติม

2.4 เครื่องมือทดสอบ

เครื่องมือทดสอบใหม่ถูกนำเสนอเพื่อเพิ่มความสามารถในการเรียกใช้งานทดสอบจาก Rails ในการใช้เครื่องมือทดสอบนี้เพียงพิมพ์ bin/rails test.

เครื่องมือทดสอบนี้ได้รับแรงบันดาลใจมาจาก RSpec, minitest-reporters, maxitest และอื่น ๆ มีการพัฒนาขึ้นมาดังนี้:

  • รันเทสเดียวโดยใช้หมายเลขบรรทัดของเทส
  • รันเทสหลายๆ เทสโดยระบุหมายเลขบรรทัดของเทส
  • ข้อความผิดพลาดที่ปรับปรุง ซึ่งยังช่วยให้รันเทสที่ล้มเหลวอีกครั้งได้ง่ายขึ้น
  • ระบบหยุดการทดสอบทันทีเมื่อเกิดข้อผิดพลาด โดยใช้ตัวเลือก -f เพื่อหยุดการทดสอบทันทีเมื่อเกิดข้อผิดพลาด แทนที่จะรอให้ชุดทดสอบเสร็จสมบูรณ์
  • เลื่อนการแสดงผลของการทดสอบไปยังท้ายของการรันทดสอบเต็ม โดยใช้ตัวเลือก -d
  • แสดงผลการแสดงข้อผิดพลาดทั้งหมด โดยใช้ตัวเลือก -b
  • การผสานร่วมกับ minitest เพื่ออนุญาตให้ใช้ตัวเลือกเช่น -s สำหรับข้อมูลเมล็ดพันธุ์ทดสอบ -n เพื่อรันเทสที่ระบุชื่อ -v เพื่อแสดงผลการทดสอบอย่างละเอียดและอื่น ๆ
  • การแสดงผลการทดสอบที่มีสี

3 Railties

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

3.1 การลบ

  • ลบการสนับสนุนตัวแก้บัก ใช้ byebug แทน debugger ไม่รองรับโดย Ruby 2.2. (commit)
  • ลบงาน test:all และ test:all:db ที่ถูกยกเลิกไป (commit)

  • ลบ Rails::Rack::LogTailer ที่ถูกยกเลิกไป (commit)

  • ลบค่าคงที่ RAILS_CACHE ที่ถูกยกเลิกไป (commit)

  • ลบการกำหนดค่า serve_static_assets ที่ถูกยกเลิกไป (commit)

  • ลบงานเอกสาร doc:app, doc:rails, และ doc:guides ที่ถูกยกเลิกไป (commit)

  • ลบ Rack::ContentLength middleware ออกจาก stack ค่าเริ่มต้น (Commit)

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

  • เลิกใช้งาน config.static_cache_control และใช้ config.public_file_server.headers แทน (Pull Request)

  • เลิกใช้งาน config.serve_static_files และใช้ config.public_file_server.enabled แทน (Pull Request)

  • เลิกใช้งานงานในเนมสเปซ rails และใช้งานในเนมสเปซ app แทน (เช่น rails:update และ rails:template ถูกเปลี่ยนชื่อเป็น app:update และ app:template) (Pull Request)

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

  • เพิ่ม Rails test runner bin/rails test (Pull Request)

  • แอปพลิเคชันและปลั๊กอินที่สร้างใหม่จะได้รับ README.md ในรูปแบบ Markdown (commit, Pull Request)

  • เพิ่มงาน bin/rails restart เพื่อรีสตาร์ทแอปพลิเคชัน Rails โดยสัมผัส tmp/restart.txt (Pull Request)

  • เพิ่มงาน bin/rails initializers เพื่อพิมพ์อินิเชียไลเซอร์ที่กำหนดไว้ทั้งหมดในลำดับที่ถูกเรียกใช้โดย Rails (Pull Request)

  • เพิ่มงาน bin/rails dev:cache เพื่อเปิดหรือปิดใช้งานแคชในโหมดการพัฒนา (Pull Request)

  • เพิ่มสคริปต์ bin/update เพื่ออัปเดตสภาพแวดล้อมการพัฒนาโดยอัตโนมัติ (Pull Request)

  • ส่ง Rake tasks ผ่าน bin/rails (Pull Request, Pull Request)

  • แอปพลิเคชันใหม่ถูกสร้างขึ้นด้วยตัวตรวจสอบไฟล์ระบบที่ใช้เหตุการณ์เป็นตัวควบคุมบน Linux และ macOS คุณสามารถเลือกไม่ใช้คุณลักษณะนี้ได้โดยผ่าน --skip-listen ไปยังตัวสร้าง (commit, commit)

  • สร้างแอปพลิเคชันพร้อมตัวเลือกในการเขียนบันทึกไปยัง STDOUT ในโหมดการใช้งานจริงโดยใช้ตัวแปรสภาพแวดล้อม RAILS_LOG_TO_STDOUT (Pull Request)

  • เปิดใช้งาน HSTS พร้อมส่วนหัว IncludeSubdomains สำหรับแอปพลิเคชันใหม่ (Pull Request)

  • ตัวสร้างแอปพลิเคชันเขียนไฟล์ใหม่ config/spring.rb ซึ่งบอก Spring ให้ดูไฟล์ทั่วไปเพิ่มเติม (commit)

  • เพิ่มตัวเลือก --skip-action-mailer เพื่อข้าม Action Mailer เมื่อสร้างแอปพลิเคชันใหม่ (Pull Request)

  • ลบไดเรกทอรี tmp/sessions และงาน rake ที่เกี่ยวข้อง (Pull Request)

  • เปลี่ยน _form.html.erb ที่ถูกสร้างขึ้นโดยตัวสร้าง scaffold เพื่อใช้ตัวแปรท้องถิ่น (Pull Request)

  • ปิดการโหลดคลาสอัตโนมัติในสภาพแวดล้อมการใช้งานจริง (commit)

4 Action Pack

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

4.1 การลบ

  • ลบ ActionDispatch::Request::Utils.deep_munge (commit)

  • ลบ ActionController::HideActions (Pull Request)

  • ลบ respond_to และ respond_with ฟังก์ชันตัวอย่างที่ถูกนำออกแล้ว ฟังก์ชันนี้ ถูกแยกออกเป็น responders gem (commit)

  • ลบไฟล์การยืนยันที่ถูกเลิกใช้งาน (commit)

  • ลบการใช้งานที่ถูกเลิกใช้งานของคีย์สตริงใน URL helpers (commit)

  • ลบตัวเลือก only_path ที่ถูกเลิกใช้งานใน *_path helpers (commit)

  • ลบการสนับสนุนที่ถูกเลิกใช้งานของ NamedRouteCollection#helpers (commit)

  • ลบการสนับสนุนที่ถูกเลิกใช้งานในการกำหนดเส้นทางด้วยตัวเลือก :to ที่ไม่มี # (commit)

  • ลบ ActionDispatch::Response#to_ary ที่ถูกเลิกใช้งาน (commit)

  • ลบ ActionDispatch::Request#deep_munge ที่ถูกเลิกใช้งาน (commit)

  • ลบ ActionDispatch::Http::Parameters#symbolized_path_parameters ที่ถูกเลิกใช้งาน (commit)

  • ลบตัวเลือก use_route ที่ถูกเลิกใช้งานในการทดสอบคอนโทรลเลอร์ (commit)

  • ลบ assigns และ assert_template ทั้งสองฟังก์ชันถูกแยกออกเป็น rails-controller-testing gem (Pull Request)

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

  • เลิกใช้งานทั้งหมดของ *_filter callbacks และใช้ *_action callbacks แทน (Pull Request)

  • เลิกใช้งาน *_via_redirect integration test methods ใช้ follow_redirect! ด้วยตนเองหลังจากการเรียกคำขอเพื่อให้เกิดพฤติกรรมเดียวกัน (Pull Request)

  • เลิกใช้งาน AbstractController#skip_action_callback และใช้ skip_callback methods แต่ละตัวแทน (Pull Request)

  • เลิกใช้งานตัวเลือก :nothing สำหรับเมธอด render (Pull Request)

  • เลิกใช้งานการส่งพารามิเตอร์แรกเป็น Hash และสถานะเริ่มต้นสำหรับเมธอด head (Pull Request)

  • เลิกใช้งานการใช้ชื่อคลาสของ middleware เป็นสตริงหรือสัญลักษณ์ ใช้ชื่อคลาสแทน (commit)

  • เลิกใช้งานการเข้าถึง MIME types ผ่านค่าคงที่ (เช่น Mime::HTML) ใช้ตัวดัชนีด้วยสัญลักษณ์แทน (เช่น Mime[:html]) (Pull Request)

  • เลิกใช้งาน redirect_to :back และใช้ redirect_back ซึ่งยอมรับอาร์กิวเมนต์ fallback_location ที่ต้องการ ทำให้ไม่มีโอกาสเกิด RedirectBackError (Pull Request)

  • ActionDispatch::IntegrationTest และ ActionController::TestCase เลิกใช้งานอาร์กิวเมนต์ตำแหน่งในของ keyword arguments (Pull Request)

  • เลิกใช้งานพารามิเตอร์เส้นทาง :controller และ :action (Pull Request)

  • เลิกใช้งานเมธอด env บนอินสแตนซ์ของคอนโทรลเลอร์ (commit)

  • ActionDispatch::ParamsParser เลิกใช้งานและถูกนำออกจาก middleware stack เพื่อกำหนดค่า parameter parsers ให้ใช้ ActionDispatch::Request.parameter_parsers= (commit, commit)

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

  • เพิ่ม ActionController::Renderer เพื่อเรียกใช้เทมเพลตที่ไม่ได้อยู่ในการกระทำของคอนโทรลเลอร์ (Pull Request)

  • ย้ายไปใช้รูปแบบอาร์กิวเมนต์แบบคีย์เวิร์ดใน ActionController::TestCase และ ActionDispatch::Integration วิธีการร้องขอ HTTP (Pull Request)

  • เพิ่ม http_cache_forever เข้าไปใน Action Controller เพื่อให้เราสามารถเก็บแคชการตอบสนองที่ไม่หมดอายุได้ (Pull Request)

  • ให้การเข้าถึง request variants ที่เป็นมิตรมากขึ้น (Pull Request)

  • สำหรับการกระทำที่ไม่มีเทมเพลตที่เกี่ยวข้อง ให้แสดงผล head :no_content แทนที่จะเกิดข้อผิดพลาด (Pull Request)

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

  • เพิ่มการสนับสนุนสำหรับแอป API-only ActionController::API ถูกเพิ่มเป็นตัวแทนของ ActionController::Base สำหรับแอปพลิเคชันประเภทนี้ (Pull Request)

  • ทำให้ ActionController::Parameters ไม่สืบทอดจาก HashWithIndifferentAccess อีกต่อไป (Pull Request)

  • ทำให้ง่ายต่อการเปิดใช้งาน config.force_ssl และ config.ssl_options โดยทำให้ไม่เสี่ยงต่อความเสี่ยงและง่ายต่อการปิดใช้งาน (Pull Request)

  • เพิ่มความสามารถในการส่งคืนเฮดเดอร์อะไรก็ได้ให้กับ ActionDispatch::Static (Pull Request)

  • เปลี่ยนค่าเริ่มต้นของ protect_from_forgery ให้เป็น false (commit)

  • ActionController::TestCase จะถูกย้ายไปเป็น gem เองใน Rails 5.1 ใช้ ActionDispatch::IntegrationTest แทน (commit)

  • Rails สร้าง ETags ที่อ่อนแอตามค่าเริ่มต้น (Pull Request)

  • การกระทำของคอนโทรลเลอร์ที่ไม่มีการเรียกใช้ render และไม่มีเทมเพลตที่เกี่ยวข้องจะแสดงผล head :no_content โดยอัตโนมัติแทนที่จะเกิดข้อผิดพลาด (Pull Request 1, 2)

  • เพิ่มตัวเลือกสำหรับ CSRF tokens ต่อฟอร์ม (Pull Request)

  • เพิ่มการเข้ารหัสคำขอและการแยกวิเคราะห์การตอบสนองในการทดสอบการรวมกัน (Pull Request)

  • เพิ่ม ActionController#helpers เพื่อให้เราสามารถเข้าถึงบริบทของวิวที่ระดับคอนโทรลเลอร์ได้ (Pull Request)

  • ข้อความ flash ที่ถูกละทิ้งจะถูกลบออกก่อนจัดเก็บลงในเซสชัน (Pull Request)

  • เพิ่มการสนับสนุนในการส่งคอลเลกชันของเร็คคอร์ดไปยัง fresh_when และ stale? (Pull Request)

  • ActionController::Live เป็น ActiveSupport::Concern แล้ว ซึ่ง หมายความว่าไม่สามารถรวมมันเข้ากับโมดูลอื่นๆ โดยเพียงแค่รวมมันเข้ากับ ActiveSupport::Concern หรือ ActionController::Live จะไม่มีผลในการใช้งานจริง บางคนอาจใช้โมดูลอื่นเพื่อรวมรหัสการจัดการข้อผิดพลาดของการตรวจสอบความถูกต้องของ Warden/Devise ด้วยเนื่องจากมิดเวร์ไม่สามารถจับ :warden ที่ถูกส่งออกโดยเธรดที่ถูกสร้างขึ้นได้ซึ่งเป็นกรณีเมื่อใช้ ActionController::Live (รายละเอียดเพิ่มเติมในปัญหานี้)

  • แนะนำ Response#strong_etag= และ #weak_etag= และตัวเลือกที่คล้ายกันสำหรับ fresh_when และ stale?. (Pull Request)

5 Action View

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

5.1 การลบ

  • ลบ AbstractController::Base::parent_prefixes ที่ถูกยกเลิกแล้ว (commit)

  • ลบ ActionView::Helpers::RecordTagHelper ฟังก์ชันนี้ถูกแยกออกเป็น record_tag_helper gem (Pull Request)

  • ลบตัวเลือก :rescue_format สำหรับ translate helper เนื่องจากไม่ได้รับการสนับสนุนจาก I18n อีกต่อไป (Pull Request)

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

  • เปลี่ยน template handler เริ่มต้นจาก ERB เป็น Raw (commit)

  • การเรียกใช้งาน collection rendering สามารถแคชและดึง partials หลายๆ อันพร้อมกันได้ (Pull Request, commit)

  • เพิ่มการจับคู่ wildcard ใน explicit dependencies (Pull Request)

  • ทำให้ disable_with เป็นพฤติกรรมเริ่มต้นสำหรับ submit tags ปิดใช้งานปุ่มเมื่อส่งฟอร์มเพื่อป้องกันการส่งซ้ำ (Pull Request)

  • ชื่อ partial template ไม่จำเป็นต้องเป็นตัวระบุ Ruby ที่ถูกต้องอีกต่อไป (commit)

  • datetime_tag helper ตอนนี้สร้างแท็ก input ด้วยประเภท datetime-local (Pull Request)

  • อนุญาตให้ใช้งาน blocks ในขณะที่ render ด้วย render partial: helper (Pull Request)

6 Action Mailer

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

6.1 การลบ

  • ลบ *_path helpers ที่ถูกยกเลิกใน email views (commit)

  • ลบ deliver และ deliver! methods ที่ถูกยกเลิก (commit)

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

  • การค้นหา template ตอนนี้เคารพ default locale และ I18n fallbacks (commit)

  • เพิ่ม _mailer suffix ให้กับ mailers ที่สร้างผ่าน generator ตามหลักการตั้งชื่อเดียวกับ controllers และ jobs (Pull Request)

  • เพิ่ม assert_enqueued_emails และ assert_no_enqueued_emails (Pull Request)

  • เพิ่มการกำหนดค่า config.action_mailer.deliver_later_queue_name เพื่อตั้งค่าชื่อคิวของ mailer (Pull Request)

  • เพิ่มการสนับสนุน fragment caching ใน Action Mailer views เพิ่มตัวเลือกการกำหนดค่าใหม่ config.action_mailer.perform_caching เพื่อกำหนดว่า template ของคุณควรทำ caching หรือไม่ (Pull Request)

7 Active Record

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

7.1 การลบ

  • ลบพฤติกรรมที่ถูกยกเลิกที่อนุญาตให้ส่งผ่าน nested arrays เป็นค่า query (Pull Request)

  • ลบ ActiveRecord::Tasks::DatabaseTasks#load_schema ที่ถูกยกเลิกแล้ว วิธีนี้ถูกแทนที่ด้วย ActiveRecord::Tasks::DatabaseTasks#load_schema_for (commit)

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

  • ลบการนับแบบอัตโนมัติที่ถูกยกเลิกแล้วใน has_many :through (commit)

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

  • ลบ Reflection#source_macro ที่ถูกยกเลิกแล้ว (commit)

  • ลบ symbolized_base_class และ symbolized_sti_name ที่ถูกยกเลิกแล้ว (commit)

  • ลบ ActiveRecord::Base.disable_implicit_join_references= ที่ถูกยกเลิกแล้ว (commit)

  • ลบการเข้าถึงการกำหนดค่าการเชื่อมต่อด้วยตัวเข้าถึงสตริงที่ถูกยกเลิกแล้ว (commit)

  • ลบการสนับสนุนการโหลดล่วงหน้าของการเชื่อมโยงที่ขึ้นอยู่กับอินสแตนซ์ที่ถูกยกเลิกแล้ว (commit)

  • ลบการสนับสนุนระดับเดียวกันสำหรับ PostgreSQL ranges ที่มีขอบเขตล่างที่เป็นแบบเฉพาะ (commit)

  • ลบการเตือนเมื่อแก้ไขความสัมพันธ์ด้วย Arel ที่มีการแคช นี่จะเรียกข้อผิดพลาด ImmutableRelation แทน (commit)

  • ลบ ActiveRecord::Serialization::XmlSerializer ออกจากคอร์ คุณลักษณะนี้ถูกแยกออกเป็น activemodel-serializers-xml gem. (Pull Request)

  • ลบการสนับสนุนสำหรับแอดาปเตอร์ฐานข้อมูล mysql เวอร์ชันเก่าออกจากคอร์ ผู้ใช้ส่วนใหญ่ควรใช้ mysql2 แทน จะถูกแปลงเป็น gem แยกเมื่อเราพบคนที่จะดูแลรักษา (Pull Request 1, Pull Request 2)

  • ลบการสนับสนุนสำหรับแพ็กเกจ protected_attributes (commit)

  • ลบการสนับสนุนสำหรับเวอร์ชัน PostgreSQL ต่ำกว่า 9.1 (Pull Request)

  • ลบการสนับสนุนสำหรับแพ็กเกจ activerecord-deprecated_finders (commit)

  • ลบค่าคงที่ ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES (commit)

7.2 การเตือนเกี่ยวกับการใช้งานที่ถูกยกเลิก

  • เตือนการส่งคลาสเป็นค่าในคิวรี ผู้ใช้ควรส่งสตริงแทน (Pull Request)

  • เตือนการส่งค่า false เพื่อหยุดการทำงานของ Active Record callback วิธีที่แนะนำคือให้ throw(:abort) แทน (Pull Request)

  • เตือน ActiveRecord::Base.errors_in_transactional_callbacks= (commit)

  • เตือนการใช้ Relation#uniq ให้ใช้ Relation#distinct แทน (commit)

  • เตือนประเภท :point ของ PostgreSQL ให้ใช้ประเภทใหม่ที่จะคืนค่าเป็น Point แทน Array (Pull Request)

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

  • เตือนการใช้ชื่อคีย์สำหรับข้อผิดพลาดของ restrict_dependent_destroy ให้ใช้ชื่อคีย์ใหม่แทน (Pull Request)

  • ปรับปรุงพฤติกรรมของ #tables (Pull Request)

  • เตือนให้ใช้ SchemaCache#tables, SchemaCache#table_exists? และ SchemaCache#clear_table_cache! ในแหล่งข้อมูลใหม่ของพวกเขา (Pull Request)

  • ยกเลิกการใช้งาน connection.tables ใน SQLite3 และ MySQL adapters. (Pull Request)

  • ยกเลิกการส่งอาร์กิวเมนต์ไปยัง #tables - เมธอด #tables ของ adapters บางตัว (mysql2, sqlite3) จะส่งคืนทั้งตารางและวิว ในขณะที่ adapters อื่น (postgresql) จะส่งคืนเฉพาะตารางเท่านั้น ในอนาคต #tables จะส่งคืนเฉพาะตารางเท่านั้นเพื่อให้พฤติกรรมของมันสอดคล้องกัน (Pull Request)

  • ยกเลิกการใช้งาน table_exists? - เมธอด #table_exists? จะตรวจสอบทั้งตารางและวิว ในอนาคต #table_exists? จะตรวจสอบเฉพาะตารางเท่านั้นเพื่อให้พฤติกรรมของมันสอดคล้องกันกับ #tables (Pull Request)

  • ยกเลิกการส่งอาร์กิวเมนต์ offset ไปยัง find_nth โปรดใช้เมธอด offset บน relation แทน (Pull Request)

  • ยกเลิก {insert|update|delete}_sql ใน DatabaseStatements ใช้เมธอด {insert|update|delete} สาธารณะแทน (Pull Request)

  • ยกเลิกการใช้งาน use_transactional_fixtures เพื่อเปลี่ยนเป็น use_transactional_tests เพื่อความชัดเจนมากขึ้น (Pull Request)

  • ยกเลิกการส่งคอลัมน์ไปยัง ActiveRecord::Connection#quote (commit)

  • เพิ่มตัวเลือก end ให้กับ find_in_batches เพื่อระบุที่จะหยุดการประมวลผลแบทช์ (Pull Request)

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

  • เพิ่มตัวเลือก foreign_key ให้กับ references เมื่อสร้างตาราง (commit)

  • เพิ่ม attributes API (commit)

  • เพิ่มตัวเลือก :_prefix/:_suffix ให้กับการกำหนด enum (Pull Request, Pull Request)

  • เพิ่ม #cache_key ให้กับ ActiveRecord::Relation (Pull Request)

  • เปลี่ยนค่า null เริ่มต้นของ timestamps เป็น false (commit)

  • เพิ่ม ActiveRecord::SecureToken เพื่อแยกการสร้างโทเค็นที่ไม่ซ้ำกันสำหรับแอตทริบิวต์ในโมเดลโดยใช้ SecureRandom (Pull Request)

  • เพิ่มตัวเลือก :if_exists ให้กับ drop_table (Pull Request)

  • เพิ่ม ActiveRecord::Base#accessed_fields ซึ่งสามารถใช้ค้นพบฟิลด์ที่ถูกอ่านจากโมเดลได้อย่างรวดเร็วเมื่อคุณต้องการเลือกข้อมูลที่คุณต้องการจากฐานข้อมูล (commit)

  • เพิ่มเมธอด #or ให้กับ ActiveRecord::Relation เพื่ออนุญาตให้ใช้ตัวดำเนินการ OR เพื่อรวม WHERE หรือ HAVING clauses (commit)

  • เพิ่ม ActiveRecord::Base.suppress เพื่อป้องกันการบันทึก receiver ในระหว่างการทำงานของบล็อกที่กำหนด (Pull Request)

  • belongs_to จะเริ่มทำให้เกิดข้อผิดพลาดการตรวจสอบโดยค่าเริ่มต้นหากไม่มีการเชื่อมโยง คุณสามารถปิดการใช้งานนี้ได้ตามการเชื่อมโยงแต่ละตัวด้วย optional: true ยังยกเลิกการใช้งานตัวเลือก required เพื่อเปลี่ยนเป็น optional สำหรับ belongs_to (Pull Request)

  • เพิ่ม config.active_record.dump_schemas เพื่อกำหนดพฤติกรรมของ db:structure:dump. (Pull Request)

  • เพิ่มตัวเลือก config.active_record.warn_on_records_fetched_greater_than. (Pull Request)

  • เพิ่มการสนับสนุนชนิดข้อมูล JSON ใน MySQL. (Pull Request)

  • เพิ่มการสนับสนุนการลบดัชนีพร้อมกันใน PostgreSQL. (Pull Request)

  • เพิ่มเมธอด #views และ #view_exists? ในตัวอักษรเชื่อมต่อ. (Pull Request)

  • เพิ่ม ActiveRecord::Base.ignored_columns เพื่อทำให้คอลัมน์บางคอลัมน์ สามารถถูกซ่อนจาก Active Record ได้. (Pull Request)

  • เพิ่ม connection.data_sources และ connection.data_source_exists?. เมธอดเหล่านี้กำหนดว่าความสัมพันธ์ใดสามารถใช้เป็นฐานสำหรับ Active Record โมเดล (โดย通常จะเป็นตารางและมุมมอง). (Pull Request)

  • อนุญาตให้ไฟล์ค่าเริ่มต้นตั้งค่าคลาสโมเดลในไฟล์ YAML เอง. (Pull Request)

  • เพิ่มความสามารถในการตั้งค่าเป็น uuid เป็นคีย์หลักเมื่อสร้างการเปลี่ยนแปลงฐานข้อมูล (Pull Request)

  • เพิ่ม ActiveRecord::Relation#left_joins และ ActiveRecord::Relation#left_outer_joins. (Pull Request)

  • เพิ่ม after_{create,update,delete}_commit callbacks. (Pull Request)

  • เวอร์ชัน API ที่นำเสนอให้กับคลาสการเรียกใช้งานเพื่อให้เราสามารถเปลี่ยนค่าเริ่มต้นของพารามิเตอร์ได้ โดยไม่ทำให้การเปลี่ยนแปลงฉบับเก่าเสียหาย หรือบังคับให้เขียนใหม่ผ่านรอบการเลิกใช้งาน (Pull Request)

  • ApplicationRecord เป็นคลาสแม่ใหม่สำหรับโมเดลแอป คล้ายกับการสืบทอดคลาสควบคุมแอป ที่สืบทอดจาก ApplicationController แทนที่จะสืบทอดจาก ActionController::Base สิ่งนี้ช่วยให้แอปมีจุดเดียวสำหรับกำหนดพฤติกรรมของโมเดลทั่วไปในแอป (Pull Request)

  • เพิ่มเมธอด ActiveRecord #second_to_last และ #third_to_last. (Pull Request)

  • เพิ่มความสามารถในการเพิ่มคำอธิบายให้กับวัตถุฐานข้อมูล (ตาราง คอลัมน์ ดัชนี) ด้วยความคิดเห็นที่เก็บไว้ในข้อมูลเมตาดาต้าเบสสำหรับ PostgreSQL และ MySQL. (Pull Request)

  • เพิ่มการสนับสนุนคำสั่งเตรียมใช้งานในตัวเลือก mysql2 adapter, สำหรับ mysql2 0.4.4+ ก่อนหน้านี้เฉพาะ adapter mysql ที่ถูกยกเลิกเท่านั้นที่รองรับ เพื่อเปิดใช้งาน ตั้งค่า prepared_statements: true ใน config/database.yml. (Pull Request)

  • เพิ่มความสามารถในการเรียกใช้งาน ActionRecord::Relation#update บนวัตถุความสัมพันธ์ ซึ่งจะเรียกใช้งานการตรวจสอบความถูกต้องใน callback บนวัตถุทั้งหมดในความสัมพันธ์ (Pull Request)

  • เพิ่มตัวเลือก :touch ในเมธอด save เพื่อบันทึกบันทึกโดยไม่ต้องอัปเดตเวลา. (Pull Request)

  • เพิ่มการสนับสนุนดัชนีแสดงออกและคลาสตัวดำเนินการสำหรับ PostgreSQL. (commit)

  • เพิ่ม :index_errors option เพื่อเพิ่มดัชนีให้กับข้อผิดพลาดของแอตทริบิวต์ที่ซ้อนกัน (Pull Request)

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

  • เพิ่มการสนับสนุนสำหรับ after_commit callbacks ในการทดสอบที่มีการทำธุรกรรม (Pull Request)

  • เพิ่มเมธอด foreign_key_exists? เพื่อตรวจสอบว่ามี foreign key อยู่ในตารางหรือไม่ (Pull Request)

  • เพิ่ม :time option ให้กับเมธอด touch เพื่อทำการ touch บันทึกที่มีเวลาต่างจากเวลาปัจจุบัน (Pull Request)

  • เปลี่ยน transaction callbacks เพื่อไม่ให้กลืนข้อผิดพลาด ก่อนการเปลี่ยนแปลงนี้ ข้อผิดพลาดใด ๆ ที่เกิดขึ้นภายใน transaction callback จะถูกบันทึกและแสดงในบันทึก ยกเว้นถ้าคุณใช้ ตัวเลือก raise_in_transactional_callbacks = true (ที่ถูกเพิกเฉยแล้ว)

    ตอนนี้ข้อผิดพลาดเหล่านี้จะไม่ถูกบันทึกและเพียงแค่แผ่ขึ้นมาเท่านั้น ทำให้เหมือนกับพฤติกรรมของ callback อื่น ๆ (commit)

8 Active Model

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

8.1 การลบ

  • ลบ ActiveModel::Dirty#reset_#{attribute} และ ActiveModel::Dirty#reset_changes ที่ถูกเลิกใช้งาน (Pull Request)

  • ลบการซีเรียลไซเซชัน XML คุณลักษณะนี้ถูกแยกออกเป็น activemodel-serializers-xml gem (Pull Request)

  • ลบโมดูล ActionController::ModelNaming (Pull Request)

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

  • เลิกใช้การส่งคืน false เป็นวิธีหยุด Active Model และ โฟลว์ของ callback ของ ActiveModel::Validations วิธีที่แนะนำคือ throw(:abort) (Pull Request)

  • เลิกใช้ ActiveModel::Errors#get, ActiveModel::Errors#set และ ActiveModel::Errors#[]= เมธอดที่มีพฤติกรรมที่ไม่สม่ำเสมอ (Pull Request)

  • เลิกใช้ตัวเลือก :tokenizer สำหรับ validates_length_of, เพื่อใช้ Ruby ธรรมดาแทน (Pull Request)

  • เลิกใช้ ActiveModel::Errors#add_on_empty และ ActiveModel::Errors#add_on_blank โดยไม่มีการแทนที่ (Pull Request)

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

  • เพิ่ม ActiveModel::Errors#details เพื่อกำหนดว่า validator ไหนที่ล้มเหลว (Pull Request)

  • แยก ActiveRecord::AttributeAssignment เป็น ActiveModel::AttributeAssignment ที่อนุญาตให้ใช้สำหรับวัตถุใด ๆ เป็นโมดูลที่สามารถรวมได้ (Pull Request)

  • เพิ่ม ActiveModel::Dirty#[attr_name]_previously_changed? และ ActiveModel::Dirty#[attr_name]_previous_change เพื่อเพิ่มการเข้าถึง การเปลี่ยนแปลงที่บันทึกไว้หลังจากบันทึกโมเดลแล้ว (Pull Request)

  • ตรวจสอบ multiple contexts ใน valid? และ invalid? พร้อมกัน (Pull Request)

  • เปลี่ยน validates_acceptance_of เพื่อยอมรับค่าเริ่มต้นเป็น true นอกเหนือจาก 1 (Pull Request)

    Active Job

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

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

  • ActiveJob::Base.deserialize ส่งงานไปยังคลาสงาน ซึ่งทำให้งานสามารถแนบข้อมูลเพิ่มเติมได้เมื่อถูกซีเรียลไลซ์และอ่านกลับเมื่อถูกดำเนินการ (Pull Request)

  • เพิ่มความสามารถในการกำหนดค่าแอดาปเตอร์คิวบนพื้นฐานของงานแต่ละงานโดยไม่มีผลต่องานอื่น ๆ (Pull Request)

  • งานที่สร้างขึ้นตอนนี้จะสืบทอดจาก app/jobs/application_job.rb โดยค่าเริ่มต้น (Pull Request)

  • อนุญาตให้ DelayedJob, Sidekiq, qu, que, และ queue_classic รายงานรหัสงานกลับไปยัง ActiveJob::Base เป็น provider_job_id (Pull Request, Pull Request, commit)

  • สร้าง AsyncJob processor ที่เรียกใช้งาน AsyncAdapter ที่เก็บงานไว้ใน concurrent-ruby thread pool (Pull Request)

  • เปลี่ยนแปลงแอดาปเตอร์เริ่มต้นจาก inline เป็น async ซึ่งเป็นค่าเริ่มต้นที่ดีกว่าเนื่องจากการทดสอบจะไม่พลาดการทำงานที่เกิดขึ้นแบบเสมอ (commit)

9 Active Support

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

9.1 การลบ

  • ลบ ActiveSupport::JSON::Encoding::CircularReferenceError ที่ถูกยกเลิก (commit)

  • ลบเมธอดที่ถูกยกเลิก ActiveSupport::JSON::Encoding.encode_big_decimal_as_string= และ ActiveSupport::JSON::Encoding.encode_big_decimal_as_string (commit)

  • ลบ ActiveSupport::SafeBuffer#prepend ที่ถูกยกเลิก (commit)

  • ลบเมธอดที่ถูกยกเลิกจาก Kernel คือ silence_stderr, silence_stream, capture และ quietly (commit)

  • ลบไฟล์ active_support/core_ext/big_decimal/yaml_conversions ที่ถูกยกเลิก (commit)

  • ลบเมธอดที่ถูกยกเลิก ActiveSupport::Cache::Store.instrument และ ActiveSupport::Cache::Store.instrument= (commit)

  • ลบ Class#superclass_delegating_accessor ที่ถูกยกเลิก ใช้ Class#class_attribute แทน (Pull Request)

  • ลบ ThreadSafe::Cache ใช้ Concurrent::Map แทน (Pull Request)

  • ลบ Object#itself เนื่องจากมีการนำมาใช้ใน Ruby 2.2 (Pull Request)

9.2 การเลิกใช้

  • เลิกใช้ MissingSourceFile และใช้ LoadError แทน (commit)

  • เลิกใช้ alias_method_chain และใช้ Module#prepend ที่ถูกนำเสนอใน Ruby 2.0 แทน (Pull Request)

  • เลิกใช้ ActiveSupport::Concurrency::Latch และใช้ Concurrent::CountDownLatch จาก concurrent-ruby แทน (Pull Request)

  • เลิกใช้ตัวเลือก :prefix ของ number_to_human_size โดยไม่มีตัวแทน (Pull Request)

  • เลิกใช้ Module#qualified_const_ และใช้เมธอด Module#const_ ที่มีอยู่แทน (Pull Request)

  • เลิกใช้การส่งสตริงเพื่อกำหนดค่า callback (Pull Request)

  • เลิกใช้ ActiveSupport::Cache::Store#namespaced_key, ActiveSupport::Cache::MemCachedStore#escape_key, และ ActiveSupport::Cache::FileStore#key_file_path ใช้ normalize_key แทน (Pull Request, commit)

  • ปรับใช้ write_cache_value แทน ActiveSupport::Cache::LocaleCache#set_cache_value ที่ถูกยกเลิกแล้ว (Pull Request)

  • ปรับใช้ไม่ส่งอาร์กิวเมนต์ให้กับ assert_nothing_raised ที่ถูกยกเลิกแล้ว (Pull Request)

  • ปรับใช้ Module.constants(false) แทน Module.local_constants ที่ถูกยกเลิกแล้ว (Pull Request)

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

  • เพิ่มเมธอด #verified และ #valid_message? ใน ActiveSupport::MessageVerifier (Pull Request)

  • เปลี่ยนวิธีหยุดการทำงานของ callback chains โดยวิธีที่แนะนำในการหยุด callback chain ตอนนี้คือการใช้ throw(:abort) โดยชัดเจน (Pull Request)

  • เพิ่มตัวเลือกการกำหนดค่าใหม่ config.active_support.halt_callback_chains_on_return_false เพื่อระบุว่า ActiveRecord, ActiveModel, และ ActiveModel::Validations callback chains สามารถหยุดได้โดยการส่งค่า false ใน 'before' callback (Pull Request)

  • เปลี่ยนการเรียงลำดับทดสอบเริ่มต้นจาก :sorted เป็น :random (commit)

  • เพิ่มเมธอด #on_weekend?, #on_weekday?, #next_weekday, #prev_weekday ใน Date, Time, และ DateTime (Pull Request, Pull Request)

  • เพิ่มตัวเลือก same_time ใน #next_week และ #prev_week สำหรับ Date, Time, และ DateTime (Pull Request)

  • เพิ่ม #prev_day และ #next_day เป็นคู่กับ #yesterday และ #tomorrow สำหรับ Date, Time, และ DateTime (Pull Request)

  • เพิ่ม SecureRandom.base58 เพื่อสร้างสตริง base58 แบบสุ่ม (commit)

  • เพิ่ม file_fixture ใน ActiveSupport::TestCase เพื่อให้สามารถเข้าถึงไฟล์ตัวอย่างในกรณีทดสอบได้ง่าย (Pull Request)

  • เพิ่ม #without ใน Enumerable และ Array เพื่อคืนค่าสำเนาของ enumerable โดยไม่รวมสมาชิกที่ระบุ (Pull Request)

  • เพิ่ม ActiveSupport::ArrayInquirer และ Array#inquiry (Pull Request)

  • เพิ่ม ActiveSupport::TimeZone#strptime เพื่อให้สามารถแปลงเวลาเป็นตามเขตเวลาที่กำหนดได้ (commit)

  • เพิ่มเมธอดค้นหา Integer#positive? และ Integer#negative? ในลักษณะเดียวกับ Integer#zero? (commit)

  • เพิ่มเวอร์ชัน bang ในเมธอด get ของ ActiveSupport::OrderedOptions ซึ่งจะเกิดข้อผิดพลาด KeyError หากค่าเป็น .blank? (Pull Request)

  • เพิ่ม Time.days_in_year เพื่อคืนค่าจำนวนวันในปีที่กำหนดหรือปีปัจจุบันหากไม่มีอาร์กิวเมนต์ (commit)

  • เพิ่มตัวตรวจสอบไฟล์แบบ evented เพื่อตรวจหาการเปลี่ยนแปลงในรหัสต้นฉบับของแอปพลิเคชัน เส้นทาง ภาษาท้องถิ่น เป็นต้น (Pull Request)

  • เพิ่มชุดเมธอด thread_m/cattr_accessor/reader/writer เพื่อประกาศตัวแปรคลาสและโมดูลที่อยู่ในแต่ละเธรด (Pull Request)

  • เพิ่ม Array#second_to_last และ Array#third_to_last methods. (Pull Request)

  • เผยแพร่ ActiveSupport::Executor และ ActiveSupport::Reloader APIs เพื่ออนุญาตให้คอมโพเนนต์และไลบรารีสามารถจัดการและมีส่วนร่วมในกระบวนการประมวลผลของโค้ดแอปพลิเคชันและกระบวนการโหลดแอปพลิเคชันใหม่ (Pull Request)

  • ActiveSupport::Duration ตอนนี้สนับสนุนการจัดรูปแบบและการแปลงข้อมูลตามมาตรฐาน ISO8601 (Pull Request)

  • ActiveSupport::JSON.decode ตอนนี้สนับสนุนการแปลงข้อมูลเวลาท้องถิ่น ISO8601 เมื่อเปิดใช้งาน parse_json_times (Pull Request)

  • ActiveSupport::JSON.decode ตอนนี้ส่งคืนออบเจ็กต์ Date สำหรับสตริงวันที่ (Pull Request)

  • เพิ่มความสามารถให้กับ TaggedLogging เพื่ออนุญาตให้สร้างตัวเรกคอร์เดอร์ได้หลายครั้งเพื่อให้ไม่แชร์แท็กกับกัน (Pull Request)

10 เครดิต

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

ข้อเสนอแนะ

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

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

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

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

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