2017-07-27 144 views
0

我試圖用下面的代碼設定日期字段(類型爲日期時間):軌驗證從功能填寫領域

class News < ApplicationRecord 
    after_create :set_date 


    def set_date 
    self.date = created_at.strftime('%Y-%d-%m') 
    end 
end 

db.schema有t.datetime:日期字段 和我從鐵軌控制檯

News.create(title: 'title3', content: 'contenta abrakadabra3')

新聞被正確地創建檢查這一點,但日期字段是零。這是爲什麼?

新聞ID:4,日期:無,標題:「title3」,內容:「contenta abrakadabra3」,來源:nil,created_at:「2017-07-27 11:49:12」,updated_at:「2017- 07-27 11:49:12「>

回答

0

您正在傳遞字符串,並且日期字段需要DateTime。

class News < ApplicationRecord 
    before_action :set_date 


    def set_date 
    self.date = created_at 
    end 
end 

如果您想只保存日期。在模型中

class News < ApplicationRecord 
    after_create :set_date 


    def set_date 
    self.date = created_at.to_date 
    end 
end 
+0

'''date'''已經有Datetime類型。我不需要遷移,是的,你是對的我想將日期存儲爲日期而沒有時間。當我在創建完成後在軌道控制檯中完成它時,新聞編號:10,日期:「2017-07-27」,標題:「title12」,內容:「contenta abrakadabra12」,來源:無,created_at:「2017-07-27 12:40:36」,updated_at:「 2017-07-27 12:40:36「 – fernal9301

+0

然後我試着在rails控制檯上顯示日期,然後再次看到'''nil'''。 – fernal9301

+0

你需要保存後,你設置日期 – dendomenko

0

strftime將你的時間對象轉換爲字符串創建遷移

class ChangeDateFormatInNews < ActiveRecord::Migration 
    def up 
    change_column :news, :date, :datetime 
    end 

    def down 
    change_column :news, :date, :date 
    end 
end 

然後。我想你想把它作爲日期存儲。爲此,您應該使用to_date

class News < ApplicationRecord 
    after_create :set_date 


    def set_date 
    self.date = created_at.to_date 
    end 
end