rails/activemodel/CHANGELOG.md
Roque Pinel e2b3ccd1aa Refactor AS::Callbacks halt config and fix the documentation
Move from `AS::Callbacks::CallbackChain.halt_and_display_warning_on_return_false`
to `AS::Callbacks.halt_and_display_warning_on_return_false` base on
[this
discussion](https://github.com/rails/rails/pull/21218#discussion_r39354580)

Fix the documentation broken by 0a120a818d413c64ff9867125f0b03788fc306f8
2015-10-01 13:04:20 -04:00

3.8 KiB

  • Validate multiple contexts on valid? and invalid? at once.

    Example:

    class Person
      include ActiveModel::Validations
    
      attr_reader :name, :title
      validates_presence_of :name, on: :create
      validates_presence_of :title, on: :update
    end
    
    person = Person.new
    person.valid?([:create, :update])    # => false
    person.errors.messages               # => {:name=>["can't be blank"], :title=>["can't be blank"]}
    

    Dmitry Polushkin

  • Add case_sensitive option for confirmation validator in models.

    Akshat Sharma

  • Ensure method_missing is called for methods passed to ActiveModel::Serialization#serializable_hash that don't exist.

    Jay Elaraj

  • Remove ActiveModel::Serializers::Xml from core.

    Zachary Scott

  • Add ActiveModel::Dirty#[attr_name]_previously_changed? and ActiveModel::Dirty#[attr_name]_previous_change to improve access to recorded changes after the model has been saved.

    It makes the dirty-attributes query methods consistent before and after saving.

    Fernando Tapia Rico

  • Deprecate the :tokenizer option for validates_length_of, in favor of plain Ruby.

    Sean Griffin

  • Deprecate ActiveModel::Errors#add_on_empty and ActiveModel::Errors#add_on_blank with no replacement.

    Wojciech Wnętrzak

  • Deprecate ActiveModel::Errors#get, ActiveModel::Errors#set and ActiveModel::Errors#[]= methods that have inconsistent behavior.

    Wojciech Wnętrzak

  • Allow symbol as values for tokenize of LengthValidator.

    Kensuke Naito

  • Assigning an unknown attribute key to an ActiveModel instance during initialization will now raise ActiveModel::AttributeAssignment::UnknownAttributeError instead of NoMethodError.

    Example:

    User.new(foo: 'some value')
    # => ActiveModel::AttributeAssignment::UnknownAttributeError: unknown attribute 'foo' for User.
    

    Eugene Gilburg

  • Extracted ActiveRecord::AttributeAssignment to ActiveModel::AttributeAssignment allowing to use it for any object as an includable module.

    Example:

    class Cat
      include ActiveModel::AttributeAssignment
      attr_accessor :name, :status
    end
    
    cat = Cat.new
    cat.assign_attributes(name: "Gorby", status: "yawning")
    cat.name   # => 'Gorby'
    cat.status # => 'yawning'
    cat.assign_attributes(status: "sleeping")
    cat.name   # => 'Gorby'
    cat.status # => 'sleeping'
    

    Bogdan Gusiev

  • Add ActiveModel::Errors#details

    To be able to return type of used validator, one can now call details on errors instance.

    Example:

    class User < ActiveRecord::Base
      validates :name, presence: true
    end
    
    user = User.new; user.valid?; user.errors.details
    => {name: [{error: :blank}]}
    

    Wojciech Wnętrzak

  • Change validates_acceptance_of to accept true by default.

    The default for validates_acceptance_of is now "1" and true. In the past, only "1" was the default and you were required to add accept: true.

  • Remove deprecated ActiveModel::Dirty#reset_#{attribute} and ActiveModel::Dirty#reset_changes.

    Rafael Mendonça França

  • Change the way in which callback chains can be halted.

    The preferred method to halt a callback chain from now on is to explicitly throw(:abort). In the past, returning false in an Active Model before_ callback had the side effect of halting the callback chain. This is not recommended anymore and, depending on the value of the ActiveSupport.halt_callback_chains_on_return_false option, will either not work at all or display a deprecation warning.

Please check 4-2-stable for previous changes.