2009-11-17 125 views
3

低睡眠所以大概缺少的東西微不足道,但...Rails的遷移產生不產生列

基於各種文檔閱讀,我認爲這會產生與表和列聲明遷移包括...

$ script/generate migration Question ordinal_label:string question_text:string 

然而,結果是...

class Question < ActiveRecord::Migration 
    def self.up 
    end 

    def self.down 
    end 
end 

爲什麼沒有表或列?

+0

萬一有一天他們impleme考慮到構建遷移中的字段定義(我們許多人希望的)的功能,您會注意到您的遷移名稱很混亂。事實上,它成爲*遷移班的名字*,你最終會得到兩個同名的班級。我不知道這可能是一個問題,但它可能是如此。要獲得與模型生成器相同的名稱,請使用:g migration create_questions(...)。即:1)預先設置一個「create_」和2)使用plural.Trick:記住mig.name是一個類名稱。免費更新您的問題,並刪除我的評論 – AgostinoX 2013-05-02 09:21:05

回答

5

script/generate migration命令不會在新表上創建列。

只有當你想添加,例如,以現有的表中的列可以作爲參數傳遞新列:

script/generate migration add_text_to_question question_text:string 

對於你正在努力實現您有什麼需要創建一個新模式:

script/generate model Question ordinal_label:string question_text:string 

這會產生像下面這樣的遷移:

class CreateQuestions < ActiveRecord::Migration 
    def self.up 
     create_table :questions do |t| 
     t.string :ordinal_label 
     t.string :question_text 
     t.timestamps 
     end 
    end 

    def self.down 
     drop_table :questions 
    end 
    end 
+0

這當然是解決方案,但我的抱怨是,它來自於經驗,而它可能很容易記錄。或者,當用戶在不添加/刪除的情況下輸入列定義時,可能會發生錯誤,而不是簡單地忽略它們。這種困惑來自這樣一個事實,即rails g遷移的幫助將其作爲創建一般遷移的一種方式,而不僅僅是添加或刪除列的遷移。閱讀幫助你意識到這個任務(添加/刪除)只是可用的選項之一。因此沒有什麼可以讓你猜測在構建遷移中不考慮列。 – AgostinoX 2013-05-02 08:53:23

3

這應該是

$ script/generate model Question ordinal_label:string question_text:string 

也將順理成章的模型,單元測試和夾具結束。 script/generatemigrate將向現有表添加列,但不會添加到新列。

$ script/generate migration add_question_text_to_question question_text:string 
0

如果您要修改模型,則需要動詞。

script/generate migration AddLabelToQuestion label:string 

要生成新模型,請使用上面的語句,但用模型替換遷移。