0

次のような Ruby Association クラスがあります。

class Association
  include Mongoid::Document
  field :issued, type: Integer
  field :lifetime, type: Integer
end

そして、コレクション内のすべてのドキュメントを削除したいと思いdoc.issued + doc.lifetime > Time.nowます。Web で次の構文を見つけました。

Association.delete_all(["issued + lifetime > ?", Time.now.to_i])

これを機能させることができず、次のエラーが発生します。

TypeError: can't convert Symbol into Integer
    from /var/lib/gems/1.9.1/gems/mongoid-3.1.0/lib/mongoid/persistence.rb:298:in `[]'
    from /var/lib/gems/1.9.1/gems/mongoid-3.1.0/lib/mongoid/persistence.rb:298:in `delete_all'
    from (irb):77
    from /usr/bin/irb:12:in `<main>'

この構文の何が問題なのか、または機能する別の構文を提案してくれる人はいますか?

4

1 に答える 1

1

delete_allは、 whereのように、次のような単一フィールドの条件のリストが必要です。

Association.delete_all(issued: 10)

あなたの場合、Javascriptを使用できます。

Association.for_js("(this.issued + this.lifetime) > ti", ti: Time.now.to_i).delete_all

注 : 状態は各ドキュメントでテストされるため、パフォーマンスは優れたものではありません。

于 2013-02-22T18:38:17.647 に答える