#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!
?