aboutsummaryrefslogtreecommitdiffstats
path: root/guides
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2015-11-30 10:30:01 +0100
committerYves Senn <yves.senn@gmail.com>2015-11-30 10:30:35 +0100
commit7e6d13420dcde3c71c49e03e81b17cdcae3ce0c2 (patch)
tree784bb075cb422e020b1a6e1799da9fc3e9d4f852 /guides
parent391567d457f15e22429e6f06803148b9d5b49689 (diff)
parentd16047018f513672e5aa7cb4997608b162845db7 (diff)
downloadrails-7e6d13420dcde3c71c49e03e81b17cdcae3ce0c2.tar.gz
rails-7e6d13420dcde3c71c49e03e81b17cdcae3ce0c2.tar.bz2
rails-7e6d13420dcde3c71c49e03e81b17cdcae3ce0c2.zip
Merge pull request #22427 from eliotsykes/validation-message-proc-doc
Document message validation option accepts Proc [ci skip]
Diffstat (limited to 'guides')
-rw-r--r--guides/source/active_record_validations.md31
1 files changed, 30 insertions, 1 deletions
diff --git a/guides/source/active_record_validations.md b/guides/source/active_record_validations.md
index fe42cec158..ec31385077 100644
--- a/guides/source/active_record_validations.md
+++ b/guides/source/active_record_validations.md
@@ -777,7 +777,36 @@ Topic.create(title: nil).valid? # => true
As you've already seen, the `:message` option lets you specify the message that
will be added to the `errors` collection when validation fails. When this
option is not used, Active Record will use the respective default error message
-for each validation helper.
+for each validation helper. The `:message` option accepts a `String` or `Proc`.
+
+A `String` `:message` value can optionally contain any/all of `%{value}`,
+`%{attribute}`, and `%{model}` which will be dynamically replaced when
+validation fails.
+
+A `Proc` `:message` value is given two arguments: a message key for i18n, and
+a hash with `:model`, `:attribute`, and `:value` key-value pairs.
+
+```ruby
+class Person < ActiveRecord::Base
+ # Hard-coded message
+ validates :name, presence: { message: "must be given please" }
+
+ # Message with dynamic attribute value. %{value} will be replaced with
+ # the actual value of the attribute. %{attribute} and %{model} also
+ # available.
+ validates :age, numericality: { message: "%{value} seems wrong" }
+
+ # Proc
+ validates :username,
+ uniqueness: {
+ # key = "activerecord.errors.models.person.attributes.username.taken"
+ # data = { model: "Person", attribute: "Username", value: <username> }
+ message: ->(key, data) do
+ "#{data[:value]} taken! Try again #{Time.zone.tomorrow}"
+ end
+ }
+end
+```
### `:on`