我想了解如何在關於處理to_param
到permalinks
處理永久用戶更新時固定鏈接已被使用的Rails 3.2
基本上這是發生什麼事了一些建議。
- 創建一個新的公司
- 公司
:name
然後參數,並保存在數據庫 - 一個
:permalink
更新現有公司,您可以更改的:permalink
- 有驗證,以確保用戶的更新
:permalink
是唯一的
我遇到的問題是當更新公司的:permalink
到已經存在的東西。唯一性驗證工作,這是偉大的,但如果我嘗試編輯permalink
別的東西,我得到的"Name already taken"
閃存驗證錯誤,因爲它認爲它改變了params[:id]
到無效的永久鏈接,而不是正在重置,並使用現有的params[:id]
的我正在編輯已有的:permalink
(公司)的公司。由於我的companies_controller.rb
正在使用@company = Company.find_by_permalink[:id])
我想知道處理此問題的最佳方法嗎?
class Companies < ActiveRecord::Base
before_create :set_permalink
before_update :update_permalink
attr_accessible :name, :permalink
validates :name, :permalink, uniqueness: { message: 'already taken' }
def to_param
permalink
end
private
def set_permalink_url
self.permalink = name.parameterize
end
def update_permalink_url
self.permalink = permalink.parameterize
end
end
道歉,如果我沒有太多的意義。
在此先感謝。
嗨m_x,謝謝你花時間和解釋各種概念。非常感謝,謝謝。我只是遇到了after_rollback回調問題,因爲它仍然在改變url(永久鏈接)而不是恢復到permalink_was。因此,不是使用現有的id,而是將id更改爲不同的公司(例如用戶試圖更改的已存在的profile_url)。 –
嗯...我的不好。我認爲我給你的第二個解決方案應該更好(刪除回調) –
再次感謝M_x。是否有可能更深入地瞭解第二種解決方案的工作原理。我完全相信如何實現它。感謝你的幫助。 –