我的模型中有一个方法,我用before_create
来调用它:
def first_position
if [...]
[...]
else
@last_known = Picture.where(user_id: user_id).order('position desc').first
self.position = nil
end
end
还有一个我用after_commit
调用的方法:
def default_position
pictures = Picture.where(user_id: user_id).where('created_at > ?', @last_known.created_at)
i = @last_known.position + 1
pictures.each do |pic|
pic.position = i
i += 1
end
end
但是在default_position
中,@last_known
返回 nil 。你知道为什么吗?
编辑:
好吧,我发现我有两次提交,但是与图片有关的是第二次提交,因此@last_known
设置为第一次提交,但是在第二次提交时消失了。
答案 0 :(得分:0)
最初,我认为ActiveRecord在after_commit之前的某个时间重新加载记录,或者至少重新初始化它。我已经使用Rails 5.2.1进行了检查,实例变量没有任何反应,它们保持正确设置。这意味着(除非您使用的是较旧的Rails),对于给定的用户而言,根本没有图片,并且您的代码似乎无法处理该图片。
此外,您的after_commit
也将在更新对象后运行,这可能是问题所在,因为在这种情况下将不会设置变量。