2017-01-16 50 views
1

我有一個ActivityType模型,在創建後創建一個動態頁面,其中一個slug等同於ActivityType的slu。。FriendlyID - 在保存之前分配一個slu 012

如果一個頁面已經存在這個slug,它會拋出一個驗證錯誤,所以我試圖在保存之前更改ActivityType的slug,假設動態頁面已經存在這個slug。

我已經寫了下面的代碼:

def check_and_change_slug 
    n = 1 
    slug = title 
    while DynamicPage.exists?(slug: slug) 
    slug = title + "-#{n}" 
    n + 1 
    end 
end 

我的問題是,如果我保存記錄之前,執行此代碼,將友好ID試圖創建一個新的團狀,或簡單地用一個我去已經手動分配?

我已經瀏覽過文檔,因此似乎找不到任何東西。

在此先感謝。

回答

1

你可能爲了達到這個使用candidates功能:

class ActivityType < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :slug_candidates, use: :slugged 

    def slug_candidates 
    n = 1 
    slug = title 
    while DynamicPage.exists?(slug: slug) 
     slug = title + "-#{n}" 
     n += 1 
    end 
    end 
end 
+0

感謝您的答覆 - 抱歉,我應該在我的開放問題表示 - 有可能是已經存在的,即使塞還沒有一個動態頁面之前使用過,所以我需要做手動檢查和分配 - 你的代碼當然有意義,但我不認爲可以在這裏使用 – Mark

+0

@Mark我已經更新了我的答案。你可以將你的代碼插入'slug_candidates'方法。我已經在示例項目中對其進行了測試,並且按預期工作 –

+0

忘記回覆 - 非常感謝! – Mark