2017-11-17 114 views
1

我想有這是假設有5分鐘加入到它的實例的created_at值ends_at欄的記載:Ruby on Rails的 - 在創建記錄添加END_TIME

Class Post < ApplicationRecord 
    after_create :set_end_time 

    private 
    def set_end_time 
     self.ends_at = self.created_at + 5.minutes 
    end 
end 

這節省了ends_at列作爲數據庫中的空值

+0

找到答案https://stackoverflow.com/a/27443303/6361142 –

回答

2

您激發after_create掛鉤。它在Rails調用SQL INSERT命令後被觸發。因此,當對象保存到數據庫時,您已經設置了ends_at,並且不會再保存該對象。初始化的對象ends_at不會去任何地方,然後只是從內存中清除。

before_create取代你的掛鉤,它應該爲你做竅門。

+0

'before_create'也不起作用,請閱讀相關問題,例如添加過期日期https://stackoverflow.com/a/27443303/6361142,可能是由於'ends_at'的數據包引起的。 –

+0

Can你請:1.爲此表粘貼db/schema塊? 2.檢查'set_end_time'是否被'logger'或'debugger'在'before_create'情況下調用 – AntonTkachov

0

你忘了保存記錄

def set_end_time 
    self.ends_at = self.created_at + 5.minutes 
    save 
end 
0

一個艱難的方式做這將是設置默認值,在創建行時如果爲例 change_column_default遷移 :帖子:END_TIME「 current_timestamp +(5 ||'minutes'):: interval「如果你使用postgres作爲例子。

但只有在你確定這不會很快改變時纔會這樣做。 如果是,那麼使用自定義setter設置before_create掛鉤是要走的路(請確保您的字段是日期時間類型)