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

时间:2016-10-13 12:39:24

标签: ruby-on-rails object activerecord insert-update destroy

我正在对一个表现得很奇怪的对象进行一些保存和销毁操作。

  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时,它还会返回被破坏的对象和

bookmark_obj.updated_at = Time.now 

未更新。

3 个答案:

答案 0 :(得分:0)

bookmark_obj.reload

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

如果是destroyreload父对象

parent_obj.reload
parent_obj.bookmarks

希望有所帮助!

答案 1 :(得分:0)

使用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  

答案 2 :(得分:0)

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

我注意到你使用" safe"方法savedelete的版本,因此,由于您的回调验证程序失败,更新和删除可能不会发生?您是否检查了save!delete!等危险版本?