我試圖在使用after_commit回調創建對象之後爲對象生成一個獨特的slu slu。在rails中創建活動記錄對象之後產生一個slu 012
after_commit :create_slug, on: :create
def create_slug
self.slug = generate_slug
self.save
end
當我嘗試保存該對象時,出現「堆棧級別過深」錯誤。我假設,因爲我保存對象,它一次又一次地被稱爲after_commit回調。
在這種情況下生成和保存獨特的slu What的最佳方法是什麼?
我thnk這兩種方法和@lei_liu工作。任何想法是更好的方法使用? – Lorenz
取決於您是否需要在創建段塞之前將數據保存在磁盤中。當我讀取你的代碼時,我假定發生了一些事情,需要在生成slug之前創建數據,就像數據庫交互在某處創建靜態路由一樣,或者發送一封電子郵件,如果數據未被持久化在生成slu before之前。如果你沒有根據數據庫中的數據做一些生成slug的工作,那麼只有對數據庫進行單一事務(我的建議),性能會更好。 –
[bkoski/slug](https://github.com/bkoski/slug/blob/master/lib/slug/slug.rb#L32)創建slu uses時使用'before_validation'回調。 [FriendlyId/friendly_id](https://github.com/norman/friendly_id/blob/8069fc9959215e5f4872927928b3b7a95e9beacd/lib/friendly_id/slugged.rb#L250)使用'before_validation'將slug和'after_validation'設置爲unset_if_invalid。 –