Удалить объект из массива в mongodb - PullRequest
2 голосов
/ 08 декабря 2011

У меня простое применение на рельсах с Mongodb (Mondoid mapper).Эшафот posts, и я пытаюсь реализовать рейтинг функционала.Post имеет следующую структуру:

> class Post
  include Mongoid::Document
  include Mongoid::Timestamps

  field :title, type: String
  field :description, type: String
  field :rank, type: Integer, default: "0"
  field :voter_up, type: Array, default: []
  field :voter_down, type: Array, default: []  

Как видите, есть два поля voter_up, _down.Это добавить пользователей, в зависимости от того, как они проголосовали.self.voter_up << user.id или self.voter_down << user.id.В базе данных это выглядит так:

"voter_up" : [
    ObjectId("4ee08b6e405f3d0a29000005"),
    ObjectId("4ee0aaff405f3d0a2900003a")
]

А если пользователь передумал и хочет проголосовать наоборот.Например, в первый раз пользователь проголосовал за UP.А потом проголосовал ВНИЗ.В этой ситуации мне нужно удалить этого пользователя из массива voter_up и добавить в voter_down.С консоли rails это работает array.delete(object), но если я попробую это self.voter_up.delete(user.id) в функции модели - ничего не произойдет.Почему?

Ответы [ 2 ]

3 голосов
/ 08 декабря 2011

Боюсь, что ваша консоль и модал будут работать. Поскольку удаление, которое вы здесь используете, является методом массива ruby, а не монгоидами. Поэтому вам нужно вызвать save после удаления, чтобы отправить измененный массив на сервер.

     self.voter_up.delete(user.id)
     self.save
0 голосов
/ 06 декабря 2013

self.voter_up << "# {user.id}" или self.voter_down << "# {user.id}" Я думаю, что это будет работать, попробуйте </p>

...