2011-12-08 4 views
1

私はMongodb(Mondoidマッパー)を使って簡単なアプリケーションをレール上に持っています。足場postsと、評価機能を実装しようとしています。あなたが見ることができるように、2つのフィールドvoter_up_downがあるmongodbの配列からオブジェクトを削除する

> 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: [] 

Postは、次の構造を有しています。ユーザーの投票方法に応じてユーザーを追加します。 self.voter_up << user.idまたはself.voter_down << user.idである。データベースでは、次のようになります。

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

そして、ユーザーが自分の考えを変えて逆の投票をしたければ、例えば、初めてユーザーが投票しました。そして、DOWNに投票しました。この状況では、このユーザーを配列voter_upから削除し、voter_downに追加する必要があります。レールコンソールからはarray.delete(object)が動作しますが、それを試してみるとself.voter_up.delete(user.id)はモデル機能には何も起きません。どうして?

答えて

2

私はコンソールとモーダルの両方がうまくいくと思います。ここであなたが使用している削除は、モンゴイドではなく、ルビ配列のメソッドです。したがって、変更された配列をサーバーにプッシュするには、deleteの後にsaveを呼び出す必要があります。

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

を試してみます、ありがとうございました!私はそれについて忘れた=) – Eugene

0

self.voter_up < < "#{user.id}"、またはself.voter_down < < "#{user.id}" 私はこれが機能すると思います、ああ

関連する問題