我們有script/generate migration add_fieldname_to_tablename fieldname:datatype
用於將新列添加到模型的語法。Rails migration for change列
在同一行上,我們有腳本/生成用於更改列的數據類型嗎?或者我應該直接將SQL寫入我的vanilla遷移中?
我想將列從datetime
更改爲date
。
我們有script/generate migration add_fieldname_to_tablename fieldname:datatype
用於將新列添加到模型的語法。Rails migration for change列
在同一行上,我們有腳本/生成用於更改列的數據類型嗎?或者我應該直接將SQL寫入我的vanilla遷移中?
我想將列從datetime
更改爲date
。
我認爲這應該工作。
change_column :table_name, :column_name, :date
如果您在表格中有多列更改,也可以使用塊。
實施例:
change_table :table_name do |t|
t.change :column_name, :column_type, {options}
end
我不知道您是否可以從命令行創建遷移來完成所有這些操作,但是您可以創建新遷移,然後編輯遷移以執行此操作。
如果tablename是您的表的名稱,fieldname是您的字段的名稱,並且您想從日期時間更改爲日期,則可以編寫遷移來執行此操作。
您可以創建一個新的遷移:
rails g migration change_data_type_for_fieldname
然後編輯遷移到使用change_table:
class ChangeDataTypeForFieldname < ActiveRecord::Migration
def self.up
change_table :tablename do |t|
t.change :fieldname, :date
end
end
def self.down
change_table :tablename do |t|
t.change :fieldname, :datetime
end
end
end
然後運行遷移:
rake db:migrate
當我發現以前的答案,需要三個步驟來改變一列的類型:
第1步:
使用此代碼生成一個新的遷移文件:
rails g migration sample_name_change_column_type
第2步:
轉到/db/migrate
文件夾,並編輯自己遷移文件。有兩種不同的解決方案。
def change
change_column(:table_name, :column_name, :new_type)
end
2.
def up
change_column :table_name, :column_name, :new_type
end
def down
change_column :table_name, :column_name, :old_type
end
第3步:
不要忘記做這個命令:
rake db:migrate
我已經測試這個解決方案對於Rails 4,它運行良好。
在步驟2中,第一個在運行rake db:rollback後會失敗,我建議您檢查第二個 – Feuda 2016-12-14 09:45:51
是否有一個rails約定,它允許在生成遷移文件時無需執行任何操作即可完成所有操作,然後編輯它? – BKSpurgeon 2017-01-19 23:52:50
@BKSpurgeon是的,請查看文檔:http://edgeguides.rubyonrails.org/active_record_migrations.html – 2017-01-20 09:13:41
另一種方法使用遷移更改數據類型
第一步: 您需要使用遷移
前以移除故障數據類型字段名稱:
rails g migration RemoveFieldNameFromTableName field_name:data_type
這裏不要忘記爲你的字段
指定數據類型第2步: 現在你可以用正確的數據類型添加字段
例如:
rails g migration AddFieldNameToTableName field_name:data_type
就是這樣,現在用正確的數據類型字段添加表格就會快樂紅寶石編碼!
只是產生遷移:
rails g migration change_column_to_new_from_table_name
更新遷移這樣的:
class ClassName < ActiveRecord::Migration
change_table :table_name do |t|
t.change :column_name, :data_type
end
end
最後
rake db:migrate
我希望更多的腳本/生成遷移路線。 change_column在獨立遷移中工作正常 – papdel 2010-05-10 12:10:02
@b_ayan:就我所知,遷移名稱中唯一的神奇單詞是「add」和「remove」。 – 2010-05-10 22:57:35
這裏的排序軌道noob,但是...我明白答案,但不是對這個答案的意見。澄清讚賞:) – 2011-10-12 01:25:20