ฉันต้องเปลี่ยนประเภทคอลัมน์จากวันที่เป็นวันที่และเวลาสำหรับแอปที่ฉันกำลังทำ ฉันไม่สนใจเกี่ยวกับข้อมูลในขณะที่ยังคงพัฒนาอยู่
ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันต้องเปลี่ยนประเภทคอลัมน์จากวันที่เป็นวันที่และเวลาสำหรับแอปที่ฉันกำลังทำ ฉันไม่สนใจเกี่ยวกับข้อมูลในขณะที่ยังคงพัฒนาอยู่
ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
ที่หนึ่งในเทอร์มินัลของคุณ:
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
วิธีการก็เพราะวิธีการไม่สนับสนุนความละเอียดการโยกย้าย change
change_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
มีไว้สำหรับ