Fix errors getting duplicated when passed validations options:

- In 86620cc3aa, 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.
This commit is contained in:
Edouard CHIN 2019-07-09 16:14:56 +02:00
parent 84ff4f6ea2
commit 07ff343857
2 changed files with 3 additions and 2 deletions

View File

@ -74,7 +74,7 @@ module ActiveModel
protected
def attributes_for_hash
[@base, @attribute, @raw_type, @options]
[@base, @attribute, @raw_type, @options.except(*CALLBACKS_OPTIONS)]
end
end
end

View File

@ -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