2010-12-20 72 views
2

是否有快速控制檯命令可以運行以更改我對某個對象的類型?它目前是Ruby Date類型,但我希望它是Ruby Time類型。在Ruby on Rails中更改數據庫列的命令

我開始用這個腳手架命令:

$ rails generate scaffold Post title:string content:text postdate:date 

,但希望我會做以下幾點:

$ rails generate scaffold Post title:string content:text postdate:time 

是否有一個命令,可以運行,使更新?

+0

是否有一個原因,爲什麼默認值:timestamps(created_at,updated_at)是不夠的? – 2010-12-20 18:08:15

+0

是的,因爲postdate可能會被回溯。 – Brig 2010-12-20 19:56:26

回答

3

有時你必須寫一些實際的代碼,即使在Rails中。嘗試創建遷移,然後使用change_column方法。類似於

change_column :my_table, :my_column, :new_type 

你把它放在你的數據庫遷移文件中,而不是在shell中。

+1

編寫代碼?啊。我對鐵軌感到失望:) – Brig 2010-12-20 18:02:05

2

如果您不想讓錯誤成爲遷移集的永久部分,只需簡單地向下遷移(rake db:rollback),編輯遷移文件並遷移回備份(rake db:migrate)。

編輯:要回答你關於存在單個命令的問題嗎?就在這裏。編輯完你的遷移之後:

rake db:migrate:redo 

這會在一個命令中運行「向下」,然後是「向上」。

0

三個步驟來改變列的類型:

步驟1:

rails g migration sample_name_change_column_type 

步驟2::

轉到

使用此代碼生成一個新的遷移文件/db/migrate文件夾並編輯您所做的遷移文件。有兩種不同的解決方案。

  1. 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,它運行良好。