2011-09-10 60 views
10
rails generate model User email:string password:string 

創建以下遷移腳本爲什麼而生成模型

class CreateUsers < ActiveRecord::Migration 
    def self.up 
    create_table :users do |t| 
     t.string :email 
     t.string :password 
     t.timestamps 
    end 
    end 
    def self.down 
    drop_table :users 
    end 
end 

什麼是時間戳,並得到它創建爲什麼,當我沒問它要創建時間戳獲得創建?

回答

9

Rails的自動添加兩列,created_atupdated_at你的表/遷移/ ActiveRecord的模型。如果你不想要它們,你可以刪除它們。

做的東西自動爲您,你「不問它」是什麼Rails是擅長:這是「優於配置(COC)的約定。」你可以(幾乎)總是指定要別的東西,但在一般情況下,Rails會做的東西大多數用戶想要的方式。

創建和更新時間戳通常是非常有用的。

+0

爲t。時間戳單個字段還是映射到您提到的上述列 – Jason

+2

@Jason:這會生成['created_at'和'updated_at'](http://guides.rubyonrails.org/migrations.html#creating-a-模型)。 –

+0

@Jason它爲您生成兩列,「自動」,因爲它說... –

2

時間戳是在遷移的方法,它會在你的模型的相應表中創建兩列

例如:按你的例子​​

模塊是用戶 表用戶

,並在用戶表中它將創建兩個日期時間列

  1. created_at
  2. updated_at

這些列在創建對象或編輯對象(本例中爲用戶模型)時將自動更新。 (當u [R通過做ActiveRecord的模型的任何動作)

調查創建的記錄/更新時間時,這是非常有用的。

如果您DONOT希望有這些列,簡單的從你的遷移

HTH刪除「時間戳」的方法

sameera

22

這個問題在搜索想出了「生成軌道模型,而不會時間戳」,所以我想補充的是如何做到這一點的答案:

rails g model MyModel --no-timestamps 

這個工作在Rails的3.2+。

+2

鐵軌4:效果很好 –

+0

鐵軌5:效果很好 – Adobe

0

我用Rails 4.2.5,現在你可以或者選擇,如果你想沒有時間戳字段。

class CreateProducts < ActiveRecord::Migration 
    def change 
    create_table :products do |t| 
     t.string :name 
     t.text :description 

     t.timestamps null: false 
    end 
    end 
end 

前述會創建一個名爲與兩個時間戳字段(created_at和的updated_at)CREATE_PRODUCTS表的遷移。如果您不想要這些字段,則需要刪除時間戳記行。

class CreateProducts < ActiveRecord::Migration 
    def change 
    create_table :products do |t| 
     t.string :name 
     t.text :description 
    end 
    end 
end 

來源:http://edgeguides.rubyonrails.org/active_record_migrations.html

相關問題