我在带有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.id
或self.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)
- 没有任何反应。为什么呢?
答案 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; “#{用户身份}” 我认为这样可行,试一试