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" 版本的方法 save
和 delete
,所以更新和删除可能不会发生,因为您的回调验证器失败了?你检查过像save!
和delete!
这样的危险版本吗?
我正在对一个行为异常的对象执行一些保存和销毁操作。
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" 版本的方法 save
和 delete
,所以更新和删除可能不会发生,因为您的回调验证器失败了?你检查过像save!
和delete!
这样的危险版本吗?