2013-02-22 71 views
0

查詢語法問題,我有一個Ruby協會類,如下所示:Mongoid 3.1的Ruby 1.9.3

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

而且我要刪除所有文檔的我的集合,其中doc.issued + doc.lifetime > Time.now英寸我在網上找到了下面的語法:

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>' 

有人能告訴我有什麼不對的語法或建議不同的語法,將工作?

回答

1

DELETE_ALL,像其中,單場需要list of conditions,如:

Association.delete_all(issued: 10)

在你的情況,你可以使用JavaScript。

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

注:業績不會好,因爲條件將在每個文件進行測試。

+0

這應該工作。在我真正的實現中,發佈的是DateTime。我可以在這個答案中調用this.issued.to_i,還是需要將它移動到像ti這樣的外部變量? – 2013-02-22 19:07:22

+0

「(this.issued + this.lifetime)> ti」是Javascript指令,而不是Ruby指令。所以你只能使用Javascript函數,因此this.issued.to_i將不起作用。因爲你想保留這個變量,所以你不能在外面移動。 – Aymeric 2013-02-22 23:25:26