Rails - 对象在保存或删除后未刷新

Rails - Objects not refreshed after Saving or Deleting

我正在对一个行为异常的对象执行一些保存和销毁操作。

  if already_in_server
        bookmark_obj = array_already_bookmarked.detect {|bookmark| bookmark.article_doi == article_doi["doi"]}
        if 1 == article_doi["isbookmarked"]
          binding.pry
          bookmark_obj.updated_at = Time.now
          bookmark_obj.save
        else
          bookmark_obj.destroy
        end
 end

他们之间的关联:

up has_many -----> bookmarks
bookmark belongs_to --> up

但是当我尝试调用 up.bookmarks 时,它也 returns 销毁了对象并且

bookmark_obj.updated_at = Time.now 

未更新。

通过在 bookmark_obj.save

之后添加 bookmark_obj.reload 重新加载对象
bookmark_obj.save
bookmark_obj.reload

destroy 的情况下,reload 父对象

parent_obj.reload
parent_obj.bookmarks

希望对您有所帮助!

使用 Reload 将从数据库中重新加载记录。 所以在你保存记录后你可以这样做:

if already_in_server
    bookmark_obj = array_already_bookmarked.detect {|bookmark| bookmark.article_doi == article_doi["doi"]}
    if 1 == article_doi["isbookmarked"]
      binding.pry
      bookmark_obj.updated_at = Time.now
      bookmark_obj.save
      bookmark_obj.reload   # Add this line
    else
      bookmark_obj.destroy
    end
end  

如果删除了,那么您将需要重新加载另一个关系,正如您提到的 up has_many bookmarks

bookmark_obj.destroy
up.bookmarks # this one will contain the destroyed bookmark 
up.reload    # reload to retrieve fresh list
up.bookmarks # will not contain the destroyed bookmark  

由于您没有确认之前的解决方案,我认为它没有奏效。

我注意到您使用 "safe" 版本的方法 savedelete,所以更新和删除可能不会发生,因为您的回调验证器失败了?你检查过像save!delete!这样的危险版本吗?