在处理相当复杂的事情时,更新队列中的某些项目'我摧毁其中一个成员后,我需要依赖收集长度变短。
但是当我这样做的时候......
def destroy # destroying a unit_user
@unit = @unituser.unit
logger.info('----- queue length before destroy is ' + @unit.unit_users.length.to_s)
if @unituser.destroy
logger.info('---- queue length after destroy is ' + @unit.unit_users.length.to_s)
...记录器两次打印相同的值!
那么为什么,即使动作 最终会破坏unituser,队列长度也不会缩短到我想要的时间?
答案 0 :(得分:1)
您所看到的主要是因为集合(在本例中为@unit.unit_users
集合)被缓存(意味着,每次调用时都不会重新执行关联查询)。解决此问题的一种方法是在销毁记录后“重新加载”模型。
销毁记录后,只需执行此操作:
@unit.reload
这将重新执行首次加载@unit
。
之后,您的@unit.unit_users
集合此时应显示不同的大小。
<强>更新强>
我现在意识到,鉴于您的模型的名称,看起来您在Unit
和User
模型之间有多对多,并且连接模型名为UnitUser
。如果是这种情况,并且您只想删除关联,但保留单位和用户对象,则可以执行以下操作:
@unit.unit_users.destroy(@some_user_object)