1
我沒有成功地在模型中直接驗證重複的url。下面的代碼顯示,當用戶創建一個新的書籤時驗證效果很好。驗證唯一字段時避免重複的優雅解決方案?
validate :url_cannot_be_duplicated_per_user
def url_cannot_be_duplicated_per_user
current_user = User.find(self.user_id)
if current_user.bookmarks.any?{|b| b.url.eql? self.url }
errors.add(:url, "already added")
end
end
但問題是驗證防止編輯書籤,因爲編輯它bascially相同的書籤時,將再次通過模型,趕上重複。因此,通過該代碼,更新操作不會發生。
任何想法如何解決它?
PS:我沒把塊,如果別人在控制器首先提交給模型前檢查網址。雖然驗證工作非常正確,但代碼卻很亂。
我控制器
if duplicated? params[:bookmark][:url]
flash[:error] = 'This bookmark already added'
@bookmark = current_user.bookmarks.build(params[:bookmark])
render 'new'
else
你能給我有關驗證的完整鏈接,我不能在軌道文檔 –
找到的是[這]( http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates)你在找什麼?有了'validates:something,:uniqueness => [true或者某些選項]',你可以使用[validates_uniqueness_for]中的任何選項,如[在這裏]找到的那樣(http://api.rubyonrails.org/classes/ActiveRecord/Validations /ClassMethods.html#method-i-validates_uniqueness_of)。 – PinnyM