什么时候破坏动作会破坏物品?

时间:2015-01-05 22:20:08

标签: ruby-on-rails

在处理相当复杂的事情时,更新队列中的某些项目'我摧毁其中一个成员后,我需要依赖收集长度变短。

但是当我这样做的时候......

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,队列长度也不会缩短到我想要的时间?

1 个答案:

答案 0 :(得分:1)

您所看到的主要是因为集合(在本例中为@unit.unit_users集合)被缓存(意味着,每次调用时都不会重新执行关联查询)。解决此问题的一种方法是在销毁记录后“重新加载”模型。

销毁记录后,只需执行此操作:

@unit.reload

这将重新执行首次加载@unit

的原始查询

之后,您的@unit.unit_users集合此时应显示不同的大小。

<强>更新

我现在意识到,鉴于您的模型的名称,看起来您在UnitUser模型之间有多对多,并且连接模型名为UnitUser 。如果是这种情况,并且您只想删除关联,但保留单位和用户对象,则可以执行以下操作:

@unit.unit_users.destroy(@some_user_object)