ฉันต้องเปลี่ยนประเภทคอลัมน์จากวันที่เป็นวันที่และเวลาสำหรับแอปที่ฉันกำลังทำ ฉันไม่สนใจเกี่ยวกับข้อมูลในขณะที่ยังคงพัฒนาอยู่
ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันต้องเปลี่ยนประเภทคอลัมน์จากวันที่เป็นวันที่และเวลาสำหรับแอปที่ฉันกำลังทำ ฉันไม่สนใจเกี่ยวกับข้อมูลในขณะที่ยังคงพัฒนาอยู่
ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
ที่หนึ่งในเทอร์มินัลของคุณ:
rails g migration change_date_format_in_my_table
จากนั้นในไฟล์การโยกย้ายของคุณ:
สำหรับ Rails> = 3.2:
class ChangeDateFormatInMyTable < ActiveRecord::Migration
def up
change_column :my_table, :my_column, :datetime
end
def down
change_column :my_table, :my_column, :date
end
end
changeวิธีการที่ไม่ได้ใช้แทนupและdownวิธีการก็เพราะวิธีการไม่สนับสนุนความละเอียดการโยกย้าย changechange_column
นอกจากนี้หากคุณใช้ Rails 3 หรือใหม่กว่าคุณไม่จำเป็นต้องใช้upและdownวิธีการ คุณสามารถใช้change:
class ChangeFormatInMyTable < ActiveRecord::Migration
def change
change_column :my_table, :my_column, :my_new_type
end
end
This migration uses change_column, which is not automatically reversible. To make the migration reversible you can either: 1. Define #up and #down methods in place of the #change method. 2. Use the #reversible method to define reversible behavior.
ใน Rails 3.2 และ Rails 4 คำตอบที่ได้รับความนิยมของ Benjamin มีรูปแบบที่แตกต่างกันเล็กน้อย
ที่หนึ่งในเทอร์มินัลของคุณ:
$ rails g migration change_date_format_in_my_table
จากนั้นในไฟล์การโยกย้ายของคุณ:
class ChangeDateFormatInMyTable < ActiveRecord::Migration
def up
change_column :my_table, :my_column, :datetime
end
def down
change_column :my_table, :my_column, :date
end
end
มีเมธอดchange_columnเพียงดำเนินการในการย้ายข้อมูลของคุณด้วย datetime เป็นประเภทใหม่
change_column(:my_table, :my_column, :my_new_type)
AFAIK การย้ายข้อมูลอยู่ที่นั่นเพื่อพยายามปรับแต่งข้อมูลที่คุณสนใจ (เช่นการผลิต) เมื่อทำการเปลี่ยนแปลงสคีมา ดังนั้นหากไม่ถูกต้องและเนื่องจากเขาบอกว่าเขาไม่สนใจข้อมูลทำไมไม่เพียงแค่ปรับเปลี่ยนประเภทคอลัมน์ในการย้ายข้อมูลดั้งเดิมจากวันที่เป็นวันที่และเวลาและเรียกใช้การย้ายข้อมูลอีกครั้ง (หวังว่าคุณจะได้รับการทดสอบ :))
rake db:migrate:resetมีไว้สำหรับ