我遇到了updated_at列的麻烦,在同一个事务中似乎不相同:
@my_model = FactoryGirl.build(:my_model_bare)
@my_model.first_assoc = FactoryGirl.build(:first_assoc_sample)
@my_model.second_assoc = FactoryGirl.build(:second_assoc_sample)
@my_model.save!
puts @my_model.first_assoc.updated_at.iso8601(3)
puts @my_model.second_assoc.updated_at.iso8601(3)
最后,first_assoc.updated_at != second_assoc.updated_at
即使两个模型都保存在同一个交易中!?
如何强制updated_at对于事务内的所有操作都相同?这是一个mysql问题吗?
答案 0 :(得分:1)
'created_at'和'updated_at'列由Rails填充。
当您使用FactoryGirl时,我假设您需要将其用于测试目的。基于此,请看一下TimeCop gem:
https://github.com/travisjeffery/timecop
Timecop可以冻结时间。
如果您确实需要手动设置created_at和updated_at次数,则可以为它们分配值:
current_time = Time.now
@my_model.created_at = current_time
@my_model.updated_at = current_time
您还需要手动设置任何相关对象的值
答案 1 :(得分:0)
ActiveRecord使用ms在datetime中设置updated_at
。所以他们不会平等。
如需查看,您可以使用:
Rails.logger.info @model.updated_at.to_i
您始终可以手动更新update_at
。