我有一種情況,我需要使用所有模型的updated_at
字段來創建同步功能。但是對於用戶模式,updated_at
字段在用戶每次登錄時都會被修改。更糟糕的是,當設備使用用戶的憑據登錄以同步數據時,updated_at
字段只是在同步開始前被修改。防止在使用設計器登錄時修改用戶中的updated_at字段
所以,我的問題是,有沒有一種方法,我們可以停止設計更新updated_at
字段時,用戶登錄?
我有一種情況,我需要使用所有模型的updated_at
字段來創建同步功能。但是對於用戶模式,updated_at
字段在用戶每次登錄時都會被修改。更糟糕的是,當設備使用用戶的憑據登錄以同步數據時,updated_at
字段只是在同步開始前被修改。防止在使用設計器登錄時修改用戶中的updated_at字段
所以,我的問題是,有沒有一種方法,我們可以停止設計更新updated_at
字段時,用戶登錄?
您可以在模型中添加另一列並更新日期時間,而不是嘗試更改updated_at
的工作方式。
否則,你將需要改變設計做一些事情,如:
User.record_timestamps = false
# devise save/update action
User.record_timestamps = true
我已經嘗試了第二種方法,但它設計了什麼改變updated_at。我無法找到什麼控制器或方法來重寫添加這個。 – 2013-02-13 07:14:21
這裏就是我所做的:重寫should_record_timestamps?方法在devise字段更新時不會更改updated_at列。 這是代碼,它處理Devise :: Trackable和Rememberable。
def should_record_timestamps?
(self.changes.keys.map(&:to_sym) - (Devise::Models::Trackable.required_fields(nil) + [:remember_token, :remember_created_at])).present? && super
end
這是當。
用戶登錄設計已經改變沒有無效緩存的好方法,所以這個問題值得更新的答案。
在我的用戶模型中,我覆蓋了updated_tracked_fields!
。這自從May 21, 2014 (v. 3.3.0)以來一直在。
def update_tracked_fields!(request)
update_tracked_fields(request)
update_attrs = changes.each_with_object({}) do |(key, value), object|
object[key] = value[1]
end
update(update_attrs)
end
的update
方法是用來代替save
因爲它會自動跳過驗證並更新updated_at
列,我修改了update_attrs
因爲update
需要爲需要更新的所有列的哈希值。
你有沒有想過找出解決方案? ( – fluxsaas 2013-05-02 08:52:10
@fixusaas No ..我不得不改變我的同步邏輯 – 2013-05-03 06:18:10