2013-11-28 33 views
4

我創建了一個全新的Rails應用程序,生成一些腳手架和一些模型。經過幾次測試,我意識到由t.timestamps生成的列不包含「traditional」:null => false選項。我需要這種行爲,我看不到這是什麼。Rails生成的遷移沒有設置:null => false到created_at和update_at

我重新創建一個新的應用程序,認爲這是一個新的rails 4功能,但我無法獲得保存行爲。在這個應用程序中,時間戳工作正常。

在一個軌道控制檯「竊聽應用」當我創建一個文章中,我們可以看到:

Loading development environment (Rails 4.0.1) 

2.0.0-p247 :001 > Post.create(title:"test") 

(0.1ms) begin transaction SQL (8.6ms) INSERT INTO "posts" ("created_at", "title", "updated_at") VALUES (?, ?, ?) [["created_at", Wed, 27 Nov 2013 21:19:01 EST -05:00], ["title", "test"], ["updated_at", Wed, 27 Nov 2013 21:19:01 EST -05:00]] 
(0.8ms) commit transaction 
=> #<Post id: 1, title: "test", content: nil, excerpt: nil, dashboard: nil, created_at: "2013-11-28 02:19:01", updated_at: "2013-11-28 02:19:01"> 

2.0.0-p247 :002 > Post.last 

Post Load (0.4ms) SELECT "posts".* FROM "posts" ORDER BY "posts"."id" DESC LIMIT 1 
=> #<Post id: 1, title: "test", content: nil, excerpt: nil, dashboard: nil, created_at: nil, updated_at: nil> 

的時間戳設置,但在數據庫中不保存。

我想我錯過了一些東西。任何想法如何恢復默認行爲?

編輯:遷移文件

class CreatePosts < ActiveRecord::Migration 
    def change 
    create_table :posts do |t| 
     t.string :title 
     t.text :content 
     t.text :excerpt 
     t.boolean :dashboard 

     t.timestamps 
    end 
    end 
end 
+0

你可以在這裏發佈你的遷移文件嗎? –

+0

完成。但沒有什麼特別的。我從不在時間戳上添加:null => false選項,由我自己處理。 –

+1

2年前做出了一項更改,使其不爲空。請參閱https://github.com/rails/rails/pull/3334/files。您可能會在那裏找到有用的東西。你在使用相同版本的導軌的地方,它在哪裏工作? –

回答

5

終於讓我找到了錯誤:

一些嘗試我檢查在config目錄後,一切都。我看到一個時間戳的唯一可能性是時區配置。

評論這個(配置/ application.rb中)後:

#config.active_record.default_timezone = 'Eastern Time (US & Canada)' 

一切都恢復正常了!不再:null => false,但時間戳記能夠在數據庫中記錄。

相關問題