0
我有一個名爲Enrollments的表,我在該表上有一個名爲last_taken的列:datetime。我正在使用rails 3.2在rails中使用模型方法設置字段的默認值3
我對數據庫有一個約束,將此字段設置爲Time.now,但當然只需將默認設置爲遷移時間。我想要的是在模型中設置一個默認值。在這個網站上看到的解決方案似乎是一個回調,我已經嘗試了幾種形式。這就是目前沒有工作:
after_initialize :set_last_taken
def set_last_taken
self.last_taken ||= Time.zone.now
end
無論哪個回調我使用(即before_create,before_save)我得到零值,當我創建控制檯領域不設置字段。控制檯總是顯示如下:
1.9.3p194 :052 > Enrollment.create(user_id: 22, course_id: 8)
(0.3ms) BEGIN
Enrollment Exists (0.7ms) SELECT 1 AS one FROM "enrollments" WHERE ("enrollments"."user_id" = 22 AND "enrollments"."course_id" = 8) LIMIT 1
SQL (1.1ms) INSERT INTO "enrollments" ("course_id", "created_at", "last_taken", "role", "updated_at", "user_id") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["course_id", 8], ["created_at", Sat, 11 Oct 2014 14:56:53 EEST +03:00], ["last_taken", nil], ["role", "user"], ["updated_at", Sat, 11 Oct 2014 14:56:53 EEST +03:00], ["user_id", 22]]
(0.8ms) COMMIT
=> #<Enrollment id: 108, user_id: 22, course_id: 8, created_at: "2014-10-11 11:56:53", updated_at: "2014-10-11 11:56:53", role: "user", last_taken: nil>
它似乎有效,當我通過網站,但不是當我使用irb時。 irb不會觸發回調? – Finnjon 2014-10-12 05:18:49
是的,它也適用於回調。您可以將其記錄在軌道控制檯上查看輸出。 – 2014-10-12 17:09:26