我正在浏览Rails的Ruby代码,并且还不太了解以下方法。
评论声明如下:
如果目标不再指向记录,则目标已过时 相关的外键指的是。如果陈旧,协会 所有者的访问器方法将重新加载目标。取决于 子类,如果相关,则实现stale_state方法。 请注意,如果尚未加载目标,则不会将其视为过时。
这是定义:
def stale_target?
!inversed && loaded? && @stale_state != stale_state
end
我没有获取的部分是为什么 NOT 等于stale_state
?
答案 0 :(得分:2)
stale_state将在sub_class中实现。见http://apidock.com/rails/v4.2.1/ActiveRecord/Associations/Association/stale_state
在那里陈述
这应该被实现为返回所有者上相关键的值,这样当stale_state与最后一个find_target上存储的值不同时,目标就是陈旧的。
这仅与某些关联相关,这就是默认情况下返回nil的原因。
如果没有在sub_class中重写stale_state,它将返回nil并且等于@stale_state,它也将是nil