У меня простое применение на рельсах с 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)
в функции модели - ничего не произойдет.Почему?