0

私はmongodb、mongoid、railsを試してみようとしています。Railsには、コメントがタスクに埋め込まれている単純なタスクとコメントのモデルがあります。現在、タスクにはcomment_countという属性があります。カウントを増やすだけでなく、1回の呼び出しで新しいコメントを一緒にプッシュする方法はありますか?

タスクモデル:

class Task
  include Mongoid::Document
  field :name
  field :desc
  field :comment_count, type: Integer, default: 0
  embeds_many :comments
end

コメントモデル:

class Comment
  include Mongoid::Document
  field :entry
  embedded_in :task
end

以下は、1回の呼び出しで実行したい操作です。

1.9.3p194 :025 > task.comments.push(Comment.new(entry: "This is a comment"))
 => [#<Comment _id: 509e1708a490b3deed000003, _type: nil, entry: "First comment">, #<Comment _id: 509e1716a490b3deed000004, _type: nil, entry: "Second comment">, #<Comment _id: 509e1aa3a490b3deed000005, _type: nil, entry: "This is a comment">] 
1.9.3p194 :026 > task.inc(:comment_count, 1)
 => 3 

私は実際、1回の更新呼び出しで$ inc$ push$popなどの複数の更新修飾子を使用する方法を取得するつもりです。mongoシェルで直接実行できることと同様です。

助けてください。ありがとう

4

1 に答える 1

1

counter_cache残念ながら、Mongoid はActiveRecord のようにサポートしていないようです。

after_saveモデルで とafter_destroyコールバックを使用してCommentこれを実装し、それぞれ親のカウンターをインクリメント/デクリメントすることができます。

于 2012-11-10T13:26:20.043 に答える