Rails — объекты не обновляются после сохранения или удаления

#ruby-on-rails #object #activerecord #insert-update #destroy

#ruby-on-rails #объект #activerecord #вставить-обновить #уничтожить

Вопрос:

Я выполняю некоторые операции по сохранению и уничтожению объекта, который ведет себя странно.

   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
  

Но когда я пытаюсь вызвать.bookmarks, он также возвращает уничтоженные объекты и

 bookmark_obj.updated_at = Time.now 
  

не обновляется.

Ответ №1:

Используйте перезагрузку, которая перезагрузит запись из базы данных. итак, после сохранения записи вы можете сделать:

 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:

Перезагрузите объект, добавив bookmark_obj.reload после bookmark_obj.save

 bookmark_obj.save
bookmark_obj.reload
  

В случае destroy , reload родительский объект

 parent_obj.reload
parent_obj.bookmarks
  

Надеюсь, это поможет!

Комментарии:

1. после уничтожения? можете ли вы помочь и в этом?

Ответ №3:

Поскольку вы не подтвердили предыдущие решения, я предполагаю, что это не сработало.

Я заметил, что вы используете «безопасные» версии методов save и delete , возможно, обновления и удаления просто не происходят из-за сбоев ваших валидаторов обратных вызовов? Проверяли ли вы опасные версии, такие как save! и delete! ?