2012-05-10 14 views
3

我有一個包含用戶名和角色和公司的角色表。我想通過一個新的遷移文件將數據插入到該表中,那麼我該怎麼做?如何通過遷移的幫助將數據插入到表中並且該表是通過另一次遷移先前生成的

我得到了這樣的代碼,但我怎麼能使用它,以及我無法理解的地方。

class Foo < ActiveRecord::Migration 
    def self.up 
    Users.new(:username => "Hello", :role => "Admin") 
    end 
    def self.down 
    Users.delete_all(:username => "Hello") 
    end 
end 

回答

6

此:

Users.new(:username => "Hello", :role => "Admin") 

不將數據插入表格。它僅僅創建一個用戶對象。要插入數據,你必須調用save創建對象:

Users.new(:username => "Hello", :role => "Admin").save 

或者更好的是,使用create代替new

Users.create(:username => "Hello", :role => "Admin") 
+1

在那裏我必須正確的代碼我很困惑,我想通過遷移在前面生成的表中輸入此數據 – SSP

+0

你是什麼意思?您已經在遷移文件中擁有該代碼,那麼爲什麼要問該編寫代碼的位置?請解釋什麼問題更清楚。 – Mischa

+1

你好mischa謝謝我通過你的回答的幫助做到了這一點,但實際上我很困惑,但一些谷歌和實際後,我得到了這個 – SSP

2

看起來您正在使用此數據庫遷移專門用於填充數據。

數據庫遷移意味着更改數據庫模式,而不是填充數據庫(儘管您可以添加一些邏輯以在更改後添加數據庫;例如,如果向用戶表添加列角色,則可以添加一些自定義邏輯來爲用戶表中的現有條目填充新添加的字段)。有關詳細信息,請參閱rails api - migrations

如果您忘記添加代碼來填充你以前的數據庫遷移的數據庫,可以撤銷之前的遷移和再次使用應用它:

rake db:rollback 
... Edit the previous migration ..Add the code to populate 
rake db:migrate 

如果你只是想填充數據庫,你應該取而代之的是數據庫。有關更多信息,請參閱this railscast

編輯:種子數據庫:

創建一個名爲DB/seeds.rb
添加記錄創建這樣的代碼文件:

['Sampath', 'Suresh'].each do |name| 
    User.create(role: 'admin', username: name) 
end 

然後,

rake db:seed 

這將讀取seeds.rb並填充數據庫。

+2

薩里爾我可以rollbacke因爲它的一週歲表我不允許觸摸那張表,所以還有其他方法,所以我可以運行新的遷移並將數據插入到表中。 – SSP

+0

我已經編輯了關於如何爲數據庫創建種子的答案。 – Salil