Удаление DataMapper работает, но только после перезапуска моего приложения - PullRequest
1 голос
/ 22 января 2011

У меня есть две модели: пользователь и фрагмент:

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

Дело в том, что destroy_res всегда возвращает true. Я попытался сохранить пользователя после удаления фрагмента. Это вернулось также. Дело в том, что когда я получаю доступ к представлению, которое использует код:

snippets = user.snippets

возвращает полный список, включая фрагмент, который должен был быть уничтожен. Однако, если я перезапущу приложение, я увижу правильный список. Что я делаю неправильно? Должен ли я как-то форсировать коммит в базу данных?

1 Ответ

2 голосов
/ 22 января 2011

Возможно, вы загружаете коллекцию фрагментов перед тем, как уничтожить фрагмент, после чего вы снова получаете доступ к этой коллекции, и она все еще содержит удаленный фрагмент. Если это так, вы можете отклонить уничтоженный фрагмент следующим образом:

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

Кстати - вы можете уничтожить фрагмент, как это:

user.snippets.get(snip_id).destroy

Немного приятнее:)

...