2010-05-12 34 views
2

我試圖捕獲拋出唯一性錯誤的值(或者就此而言,任何其他類型的內置驗證)以將其顯示在:message選項。這是我試過(沒有工作)Rails 2.3唯一性驗證 - 我如何捕獲導致錯誤的值

# inside the model 
validate_uniqueness_of :name, :message => "#{name} has already been taken" # also tried using #{:name} 

我可以使用自定義的驗證,但這種用拍一個已經集成到AR東西的地步。有什麼想法嗎?謝謝。

回答

0

嘗試self.name

validates_uniqueness_of :name, :message => "#{self.name} has already been taken" # also tried using #{:name} 

而且validate_uniqueness_of錯了,它應該是validates_uniqueness_of

如果沒有作品使用validate方法和註釋行validates_uniqueness_of

def validate 
    name= User.find_by_name(self.name) #Assuming User is your Model Name 
    unless name.blank? 
     self.errors.add :base, "#{self.name} has already been taken" 
    end 
end 
+0

我試過了你的第一個解決方案('self.name'),但它只是迴應類的名字。我知道我可以通過驗證來達到我想要的效果,但我試圖用原始方法來檢查這是否可行。 – sa125 2010-05-12 07:26:26

1

嘗試這種插值技術:

validate_uniqueness_of :name, :message => "%{value} has already been taken" 

的RailsGuide爲Active Record Validations and Callbacks表示%{value}在自定義錯誤消息內插的例子:我看着validates_each文檔

:message => "%{value} is not a valid size" 

和可以看到驗證塊被傳遞三個屬性:|record, attr, value|。所有這三種都可以通過%{model}%{attribute}%{value}訪問。

雖然這是有限的,因爲它只允許您訪問三個屬性,謝天謝地,這就是你所需要的。

相關問題