2010-08-24 62 views
4

BrowserCMS可以「刪除」對象,它基本上將:deleted屬性設置爲true。回形針最初運行以下代碼以獲得特定類別的所有對象:BrowserCMS和Paperclip

Person.connection.select_values(Person.send(:construct_finder_sql, :select => 'id')) 

這可能會返回[1,2,3]。即使,例如,3已將:deleted設置爲true。回形針然後使用ActiveRecord使用先前的id列表來獲取所有People對象。不幸的是,BrowserCMS不會返回被標記爲已刪除的對象,所以Paperclip怪異地說「找不到ID = 3的人」。

我不知道該從哪裏走,從這裏短缺的猴子補丁。思考?

回答

1

所以,解決這個的哈克的方式(其可以很容易地變成紙夾的一個叉)是修改上面簡單地準備的代碼:

Person.all.collect(&:id) 

Person.connection.select_values(Person.send(
    :construct_finder_sql, 
    :select => 'id', 
    :conditions => { :deleted => false } 
)) 

第一選項只是強制回形針通過Rails執行查詢,這實際上是通過BrowserCMS,因此使用它的約束(即:沒有看到任何刪除的記錄)。第二個選項幾乎完成相同的查詢,但是省略了BCMS刪除的記錄。

我相信第一個選項是最好的,因爲它允許BCMS控制查詢,所以如果有什麼變化,你的猴子補丁不會中斷。