我正在对一个表现得很奇怪的对象进行一些保存和销毁操作。
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
未更新。
答案 0 :(得分:0)
在bookmark_obj.reload
bookmark_obj.save
重新加载对象
bookmark_obj.save
bookmark_obj.reload
如果是destroy
,reload
父对象
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"方法save
和delete
的版本,因此,由于您的回调验证程序失败,更新和删除可能不会发生?您是否检查了save!
和delete!
等危险版本?