# การ Migration ขั้นสูง (Ruby on Rails) > การ migration ที่ซับซ้อน, reversible migrations, การ migration ข้อมูล, rollbacks, ข้อจำกัดของ DB เทียบกับ validation, safe migrations - 20 คำถามสัมภาษณ์ - Mid-Level - [คำถามสัมภาษณ์: Ruby on Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions.md) ## 1. ความแตกต่างระหว่าง method change กับ up/down ใน Rails migration คืออะไร? **คำตอบ** method change เป็นไวยากรณ์แบบย่อที่เปิดตัวใน Rails 3.1 ซึ่งช่วยให้ Rails สามารถอนุมานการดำเนินการย้อนกลับได้โดยอัตโนมัติ ใช้งานได้กับการดำเนินการทั่วไปส่วนใหญ่ เช่น add_column หรือ create_table ส่วน method up และ down ให้การควบคุมที่ชัดเจนเหนือการดำเนินการแบบ apply และ rollback ซึ่งจำเป็นเมื่อ Rails ไม่สามารถอนุมานการย้อนกลับได้โดยอัตโนมัติ เช่น ในระหว่างการลบข้อมูลหรือการแปลงข้อมูลที่ซับซ้อน ## 2. จะทำให้ migration เป็นแบบ reversible ได้อย่างไรเมื่อ Rails ไม่สามารถอนุมานการดำเนินการย้อนกลับได้โดยอัตโนมัติ? **คำตอบ** block reversible ช่วยให้สามารถกำหนดการดำเนินการ up และ down ได้อย่างชัดเจนภายใน method change ซึ่งมีประโยชน์อย่างยิ่งสำหรับการดำเนินการอย่าง remove_column ที่ Rails จำเป็นต้องทราบชนิดและตัวเลือกของคอลัมน์เพื่อสร้างมันขึ้นมาใหม่ในระหว่าง rollback block reversible มอบความยืดหยุ่นของ up/down ในขณะที่ยังคงไวยากรณ์สมัยใหม่ของ change ไว้ ## 3. คำสั่งใดที่อนุญาตให้ rollback หลาย migration ในการดำเนินการเดียว? **คำตอบ** คำสั่ง rails db:rollback STEP=n อนุญาตให้ rollback migration ที่ถูกรันล่าสุด n รายการ ตัวอย่างเช่น STEP=3 จะ rollback migration สามรายการล่าสุดในลำดับย้อนกลับจากการรันของมัน หากไม่มีตัวเลือก STEP จะมีเพียง migration สุดท้ายเท่านั้นที่ถูก rollback คำสั่งนี้มีประโยชน์สำหรับการกลับไปยังสถานะก่อนหน้าของฐานข้อมูลอย่างรวดเร็วในระหว่างการพัฒนา ## มีอีก 17 คำถาม - เหตุใดจึงควรหลีกเลี่ยงการใช้การอ้างอิงไปยัง model ActiveRecord ในการ migration ข้อมูล? - แนวทางปฏิบัติที่ดีที่สุดในการทำ data migration บน production สำหรับตารางขนาดใหญ่คืออะไร? สมัครฟรี: https://sharpskill.dev/th/login ## หัวข้อสัมภาษณ์ Ruby on Rails อื่นๆ - [พื้นฐาน Ruby](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/ruby-basics.md): 25 คำถาม, Junior - [การเขียนโปรแกรมเชิงวัตถุใน Ruby](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/ruby-oop.md): 20 คำถาม, Junior - [พื้นฐาน Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-fundamentals.md): 18 คำถาม, Junior - [Routing & Controllers](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/routing-controllers.md): 22 คำถาม, Junior - [พื้นฐาน ActiveRecord](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/active-record-basics.md): 25 คำถาม, Junior - [Views และ ERB Templates](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/views-erb-templates.md): 20 คำถาม, Junior - [การเชื่อมโยงของ ActiveRecord](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/active-record-associations.md): 24 คำถาม, Mid-Level - [การสอบถาม ActiveRecord ขั้นสูง](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/active-record-queries.md): 28 คำถาม, Mid-Level - [ฟอร์ม Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-forms.md): 20 คำถาม, Mid-Level - [การยืนยันตัวตนและการอนุญาต](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/authentication-authorization.md): 22 คำถาม, Mid-Level - [Asset Pipeline สมัยใหม่และ frontend](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-asset-pipeline.md): 18 คำถาม, Mid-Level - [โหมด API ของ Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-api-mode.md): 20 คำถาม, Mid-Level - [การทดสอบด้วย RSpec](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-testing-rspec.md): 24 คำถาม, Mid-Level - [ActiveJob & Background Jobs](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/active-job-background-jobs.md): 20 คำถาม, Mid-Level - [ActionCable & WebSockets](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/action-cable-websockets.md): 18 คำถาม, Mid-Level - [ActionMailer](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/action-mailer.md): 18 คำถาม, Mid-Level - [ActiveStorage](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/active-storage.md): 20 คำถาม, Mid-Level - [กลยุทธ์การ Caching](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/caching-strategies.md): 20 คำถาม, Mid-Level - [Rails Engines และแอปแบบโมดูลาร์](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-engines-modular-apps.md): 18 คำถาม, Senior - [การเพิ่มประสิทธิภาพการทำงาน](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/performance-optimization.md): 26 คำถาม, Senior - [Design Patterns ใน Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-design-patterns.md): 22 คำถาม, Senior - [เมตาโปรแกรมมิงใน Ruby](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/ruby-metaprogramming.md): 20 คำถาม, Senior - [ความปลอดภัยของ Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-security.md): 22 คำถาม, Senior - [GraphQL กับ Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/graphql-rails.md): 20 คำถาม, Senior - [การดีพลอยและโปรดักชัน](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-deployment-production.md): 20 คำถาม, Senior - [Monitoring & Logging](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/monitoring-logging.md): 20 คำถาม, Senior - [กลยุทธ์การอัปเกรด Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-upgrade-strategies.md): 18 คำถาม, Senior --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/database-migrations-advanced