从mongodb中的数组中删除对象

时间:2011-12-08 14:25:52

标签: ruby-on-rails-3 mongodb mongoid

我在带有Mongodb(Mondoid映射器)的rails上有简单的应用程序。脚手架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.idself.voter_down << user.id。在数据库中,它看起来像:

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

如果用户改变了主意并希望投反对票。例如,在第一次用户投票UP。然后投票DOWN。在这种情况下,我需要从数组voter_up中删除此用户并添加到voter_down。从rails控制台可以array.delete(object),但如果我在模型函数中尝试self.voter_up.delete(user.id) - 没有任何反应。为什么呢?

2 个答案:

答案 0 :(得分:3)

我担心你的控制台和模态都会起作用。因为你在这里使用的删除是一个ruby数组方法而不是mongoids。因此,您需要在删除后调用save以将更改的数组推送到服务器。

     self.voter_up.delete(user.id)
     self.save

答案 1 :(得分:0)

self.voter_up&lt;&lt; “#{user.id}”或self.voter_down&lt;&lt; “#{用户身份}” 我认为这样可行,试一试