2011-02-14 109 views
16

場景:我們已經有了一個文檔模型,我們要添加添加多個列在一個遷移

  • 公共
  • 私人

列或多列使用一次遷移。

從我迄今爲止搜索和閱讀的內容中,您只需編輯遷移文件即可。如果已經應用遷移,請回滾並再次遷移。

  1. 這是常見的最佳實踐,還是有更好的方法?
  2. 如果這樣做的話,那麼遷移的適當命名是什麼?
+12

這些都是非常可怕的變量名稱,因爲它們通常是關鍵字,所以幾乎可以在任何編程語言中使用。 – 2012-10-24 17:59:10

回答

61

只有當該遷移是本地遷移並且尚未推送到任何存儲庫時,回滾遷移並重新編輯它纔是安全的。編輯其他人應用的遷移可能會導致問題。

將列添加到現有的表最安全的方式就是創建一個新的遷移:如果您使用add_[column_names]_to_[model]命名約定

rails g migration add_public_and_private_to_document public:string private:string 

,軌道將制定出相應的表,創建一個要遷移。

有一個在這裏閱讀更多的信息:http://guides.rubyonrails.org/migrations.html

0

可以發出這樣的命令:

軌摹遷移文檔市民:字符串私營:字符串

2

@Cam方式是分辯..除了在運行遷移之後需要更新兩件事情。

因此,讓我們說我有一個現有的腳手架叫myapp,我想添加更多的領域,該腳手架。三件事情要完成。

的字段被添加有:

=>

1)rails g migration add_term_count_and_current_record_count_and_previous_record_count_to_myapp term_count:integer , current_record_count:integer , previous_record_count:integer

=>

2) Update views, example updating _form.html.rb 

我需要添加:

<div class="field"> 
    <%= f.label :current_record_count %><br> 
    <%= f.number_field :current_record_count%> 
    </div> 

<div class="field"> 
    <%= f.label :current_record_count %><br> 
    <%= f.number_field :previouse_record_count%> 
    </div> 

    <div class="field"> 
    <%= f.label :term_count %><br> 
    <%= f.number_field :terminations_count %> 
    </div> 

=>

3) Update Controller : 

新版本的rails具有所謂的強參數,以防止黑客傳遞任意列字段值。長話短說,用新的字段名稱更新方法,否則你將看不到新的字段。

# Never trust parameters from the scary internet, only allow the white list through. 

def vendor_file_params 
    params.require(:vendor_file).permit(:name, :run_date, :term_count , 
    :current_record_count , :previous_record_count ,:comments) 
end 
end