diff options
author | Yves Senn <yves.senn@gmail.com> | 2015-11-30 10:30:01 +0100 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2015-11-30 10:30:35 +0100 |
commit | 7e6d13420dcde3c71c49e03e81b17cdcae3ce0c2 (patch) | |
tree | 784bb075cb422e020b1a6e1799da9fc3e9d4f852 /guides/source/active_record_validations.md | |
parent | 391567d457f15e22429e6f06803148b9d5b49689 (diff) | |
parent | d16047018f513672e5aa7cb4997608b162845db7 (diff) | |
download | rails-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/source/active_record_validations.md')
-rw-r--r-- | guides/source/active_record_validations.md | 31 |
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` |