我有两个模型,User和Snippet:
class User
include DataMapper::Resource
property :id,Serial
...
has n,:snippets
end
class Snippet
include DataMapper::Resource
property :id,Serial
...
belongs_to :user
end
当我显示片段时,我正在使用它:
snippets = user.snippets
当我删除它们时,我正在使用它:
snippet = Snippet.first(:user_id => user.id,:id => snip_id)
if snippet
destruction_res = snippet.destroy
...
end
问题是,destruction_res总是返回true。删除代码段后,我尝试保存用户。它也返回了真实状态。问题是,当我访问使用代码的视图时:
snippets = user.snippets
它返回完整列表,包括应该销毁的片段。但是,如果我重新启动应用程序,我会看到正确的列表。我究竟做错了什么?我应该以某种方式强制提交数据库吗?
答案 0 :(得分:2)
您可能在销毁代码段之前加载了代码段集合,然后再次访问该集合并且仍然包含已删除的代码段。如果是这种情况,你可以拒绝这样的破坏片段:
user.snippets.reject!(&:destroyed?)
顺便说一句 - 你可以破坏这样的片段:
user.snippets.get(snip_id).destroy
更好一点:)