2011-09-27 51 views
2

我正在使用Agile Web Development with Rails來了解Rails。在早期的一章中,作者創建了腳手架,然後開始着眼於遷移。在他的遷移中,有一個「上」和「下」的方法,而我的遷移中只有一個「變化」的方法。作者正在使用Rails 3.05(或類似的東西),我使用3.1,但是,我不認爲這是解釋,因爲使用另一本書,但相同版本的Rails我記得創建了一個遷移,具有「向上」和「向下」的方法...Rails遷移中的方法名稱

於是,兩個問題,

一)有什麼原因,我在我的移民不同的方法名稱?

b)是否會影響功能?

我的移民

class CreateProducts < ActiveRecord::Migration 
    def change 
    create_table :products do |t| 
     t.string : title 
     t.text :description 
     t.string :image_url 
     t.decimal :price, :precision => 8, :scale => 2 

     t.timestamps 
    end 
    end 
end 

書籍遷移

class CreateProducts < ActiveRecord::Migration 
    def self.up 
    create_table :products do |t| 
     t.string :title 
     t.text :description 
     t.string :image_url 
     t.decimal :price, :precision => 8, :scale => 2 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :products 
    end 
end 

回答

5

的Rails 3.1廢除了兩個 「向上」 和遷移的 「向下」 的一部分。 現在他們被稱爲使用變更方法的「可逆遷移」。所以你的第一個代碼示例對於Rails 3.1是正確的,第二個對於3.0.x和更早版本是正確的。下面是3.1的變化指出,掠過此更新:

https://gist.github.com/958283

的重要線路:從模型和建設性的遷移發生器產生遷移文件(例如,add_name_to_users)使用可逆遷移的變化的方法,而不是普通的上下方法。

如果您仔細考慮,更新是有意義的......您不再需要定義所有步驟來「啓動」數據庫,以及將相同的步驟反向輸入到「停止」數據庫。改變方法足夠聰明,可以根據單一指令來回移動。

要回答你的第二個問題,不,它不會改變遷移的工作方式。它仍然會根據您的指示更新您的數據存儲,跟蹤遷移等。這只是描述對您的模型所做更改的更有效的方式。

+2

這不是正確的說,3.1 「廢除了」'up'和'down'。它們仍然非常有效,對於許多遷移仍然是必要的。 –

+0

o.k.,非常感謝..我確信我之前創建了一個使用「up」和「down」的3.1遷移 – Leahcim

+0

好點的Jordan。就像Rails的許多更新一樣,老式的做事方式仍然可以正常運行(在您的控制檯中可能會出現一些折舊警告),並且您「正確地認爲」是一個糟糕的選擇。我應該說一些類似於「引入了一種叫做'change'的新方法,它被用於3.0.x中使用的'up'和'down'方法。」 – backwardm