DataMapper delete只在重新启动我的应用程序后才能工作

时间:2011-01-22 18:05:47

标签: ruby sinatra datamapper

我有两个模型,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

它返回完整列表,包括应该销毁的片段。但是,如果我重新启动应用程序,我会看到正确的列表。我究竟做错了什么?我应该以某种方式强制提交数据库吗?

1 个答案:

答案 0 :(得分:2)

您可能在销毁代码段之前加载了代码段集合,然后再次访问该集合并且仍然包含已删除的代码段。如果是这种情况,你可以拒绝这样的破坏片段:

user.snippets.reject!(&:destroyed?)

顺便说一句 - 你可以破坏这样的片段:

user.snippets.get(snip_id).destroy

更好一点:)