2014-02-13 72 views
3

我在一個模型中使用acts_as_paranoid和friendly_id(5.0.1),當我摧毀的模型,並嘗試建立一個新的,將產生同樣的蛞蝓我得到電流:friendly_id和acts_as_paranoid創建重複蛞蝓

ERROR: duplicate key value violates unique constraint "index_papers_on_slug" 

我需要以某種方式得到檢查一個slug是否已經存在的代碼檢查所有對象的範圍內,而不僅僅是未刪除的對象。

如何在檢查slug是否已存在時如何獲得friendly_id以使用with_deleted。我應該注意到,我也在使用slu history歷史,這可能會使事情進一步複雜化。

在更深的挖掘,我意識到,因爲我是用歷史上塞被完全刪除,而對象就是被軟刪除:

DELETE FROM "friendly_id_slugs" WHERE "friendly_id_slugs"."id" = $1 [["id", 9423]] 

所以,我只需要弄清楚如何防止這一點,我應該沒問題,因爲它看起來像friendly_id代碼本身已經使用unscoped當試圖找到一個有效的slu。。

回答

1

加入以下模型讓我overrride的依賴於蛞蝓

def has_many_dependent_for_slugs; end 

的解決方案來自於這個github issue評論摧毀。

2

Friendly_id有一個名爲scoped的模塊,它允許您在範圍內生成獨特的slu slu。所以,可能

class Paper < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :title, :use => :scoped, :scope => :unscoped 
end 

將解決問題。

+0

這會導致以下錯誤:'undefined method unspecd for Paper' –

+0

嗯,你可以嘗試創建一個調用'unscoped'的包裝範圍嗎? – bredikhin

+0

問題似乎是friendly_id作用域期望在對象的其他屬性上作用域而不一定設置搜索的範圍,所以當我創建一個新方法時,它會抱怨這個unscoped列不存在。 –