diff options
author | Edouard CHIN <edouard.chin@shopify.com> | 2019-07-09 16:14:56 +0200 |
---|---|---|
committer | Edouard CHIN <edouard.chin@shopify.com> | 2019-07-10 18:40:12 +0200 |
commit | 07ff343857699f0806294539947cf485ff205a2b (patch) | |
tree | bf213ae34ba6e5d1cfd3d9d79969d796fc86c8af /activerecord | |
parent | 84ff4f6ea2a118b47160e3fe7ed29bff52c2a7a2 (diff) | |
download | rails-07ff343857699f0806294539947cf485ff205a2b.tar.gz rails-07ff343857699f0806294539947cf485ff205a2b.tar.bz2 rails-07ff343857699f0806294539947cf485ff205a2b.zip |
Fix errors getting duplicated when passed validations options:
- In 86620cc3aa8e2630bc8d934b1a86453276b9eee9, a change was made
on how we remove error duplication on a record for autosave
association
This fix has one caveat where validation having a `if` / `unless`
options passed as a proc would be considered different.
Example:
```ruby
class Book < ApplicationRecord
has_one :author
validates :title, presence: true, if -> { true }
validates :title, presence: true, if -> { true }
end
Book.new.valid? # false
Book.errors.full_messages # ["title can't be blank", "title can't be blank"]
```
While this example might sound strange, I think it's better to
ignore `AM::Validations` options (if, unless ...) when making the
comparison.
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/test/models/ship.rb | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/activerecord/test/models/ship.rb b/activerecord/test/models/ship.rb index 7973219a79..6bab7a1eb9 100644 --- a/activerecord/test/models/ship.rb +++ b/activerecord/test/models/ship.rb @@ -27,7 +27,8 @@ class ShipWithoutNestedAttributes < ActiveRecord::Base has_many :prisoners, inverse_of: :ship, foreign_key: :ship_id has_many :parts, class_name: "ShipPart", foreign_key: :ship_id - validates :name, presence: true + validates :name, presence: true, if: -> { true } + validates :name, presence: true, if: -> { true } end class Prisoner < ActiveRecord::Base |