當用戶嘗試創建一個記錄已存在,我想表明這樣的錯誤消息的名稱:如何定製軌ActiveRecord的驗證錯誤消息顯示屬性值
name "some name" has already been taken
我有一直在努力做:
validates_uniqueness_of :name, :message => "#{name} has already been taken"
但這輸出表名稱,而不是名稱屬性值的
當用戶嘗試創建一個記錄已存在,我想表明這樣的錯誤消息的名稱:如何定製軌ActiveRecord的驗證錯誤消息顯示屬性值
name "some name" has already been taken
我有一直在努力做:
validates_uniqueness_of :name, :message => "#{name} has already been taken"
但這輸出表名稱,而不是名稱屬性值的
兩件事情:
個%{value}
value
,而不是name
,因爲在國際化的背景下,你真的不關心模型的其餘部分。所以,你的代碼應該是:
validates_uniqueness_of :name, :message => '%{value} has already been taken'
它看起來像喲你可以將Proc
傳遞給消息。當你這樣做,你會得到兩個參數:
:activerecord.errors.models.user.attributes.name.taken
所以,如果你允許在一個進程的兩個參數,你可以使用attributes[:value]
項目得到了所使用的名稱:
validates_uniqueness_of :name,
:message => Proc.new { |error, attributes|
"#{attributes[:value]} has already been taken."
}
你用什麼版本的Rails的?
如果Rails 3. 那麼據我所知你應該使用:message => '%{value} has already been taken'
。我不知道Rails 2.3。 - 但無論如何,您都可以創建自己的自定義驗證來執行您所需的操作。
爲這個應用程序,我使用rails 2.3.4 – umar 2011-05-26 10:42:26
不錯!絕對比我的答案更清潔。 – 2011-05-20 14:42:20
知道%{attribute}也可用是有用的。 – zwalker 2016-01-09 00:42:53
'%{value}'在Rails 4中不起作用。 :( – 2016-03-18 17:27:01