rails--rails/guides/source/4_2_release_notes.md

9.0 KiB

Ruby on Rails 4.2 Release Notes

Highlights in Rails 4.2:

These release notes cover only the major changes. To know about various bug fixes and changes, please refer to the change logs or check out the list of commits in the main Rails repository on GitHub.


Upgrading to Rails 4.2

If you're upgrading an existing application, it's a great idea to have good test coverage before going in. You should also first upgrade to Rails 4.1 in case you haven't and make sure your application still runs as expected before attempting an update to Rails 4.2. A list of things to watch out for when upgrading is available in the Upgrading Ruby on Rails guide.

Major Features

Railties

Please refer to the Changelog for detailed changes.

Removals

  • The rails application command has been removed without replacement. (Pull Request)

Notable changes

  • Introduced bin/setup script to bootstrap an application. (Pull Request)

  • Changed default value for config.assets.digest to true in development. (Pull Request)

  • Introduced an API to register new extensions for rake notes. (Pull Request)

  • Introduced Rails.gem_version as a convenience method to return Gem::Version.new(Rails.version). (Pull Request)

Action Pack

Please refer to the Changelog for detailed changes.

Deprecations

  • Deprecated support for setting the to: option of a router to a symbol or a string that does not contain a # character:

    get '/posts', to: MyRackApp    => (No change necessary)
    get '/posts', to: 'post#index' => (No change necessary)
    get '/posts', to: 'posts'      => get '/posts', controller: :posts
    get '/posts', to: :index       => get '/posts', action: :index
    

    (Commit)

Notable changes

  • The *_filter family methods has been removed from the documentation. Their usage are discouraged in favor of the *_action family methods:

    after_filter          => after_action
    append_after_filter   => append_after_action
    append_around_filter  => append_around_action
    append_before_filter  => append_before_action
    around_filter         => around_action
    before_filter         => before_action
    prepend_after_filter  => prepend_after_action
    prepend_around_filter => prepend_around_action
    prepend_before_filter => prepend_before_action
    skip_after_filter     => skip_after_action
    skip_around_filter    => skip_around_action
    skip_before_filter    => skip_before_action
    skip_filter           => skip_action_callback
    

    If your application is depending on these methods, you should use the replacement *_action methods instead. These methods will be deprecated in the future and eventually removed from Rails. (Commit 1, 2)

  • Added HTTP method MKCALENDAR from RFC-4791 (Pull Request)

  • *_fragment.action_controller notifications now include the controller and action name in the payload. (Pull Request)

  • Segments that are passed into URL helpers are now automatically escaped. (Commit)

  • Improved Routing Error page with fuzzy matching for route search. (Pull Request)

  • Added option to disable logging of CSRF failures. (Pull Request)

Action Mailer

Please refer to the Changelog for detailed changes.

Notable changes

Active Record

Please refer to the Changelog for detailed changes.

Deprecations

  • Deprecated using .joins, .preload and .eager_load with associations that depends on the instance state (i.e. those defined with a scope that takes an argument) without replacement. (Commit)

  • Deprecated passing Active Record objects to .find or .exists?. Call #id on the objects first. (Commit 1, 2)

  • Deprecated half-baked support for PostgreSQL range values with excluding beginnings. We currently map PostgreSQL ranges to Ruby ranges. This conversion is not fully possible because the Ruby range does not support excluded beginnings.

    The current solution of incrementing the beginning is not correct and is now deprecated. For subtypes where we don't know how to increment (e.g. #succ is not defined) it will raise an ArgumentError for ranges with excluding beginnings.

    (Commit)

Notable changes

  • Added support for #pretty_print in ActiveRecord::Base objects. (Pull Request)

  • PostgreSQL and SQLite adapters no longer add a default limit of 255 characters on string columns. (Pull Request)

  • sqlite3:///some/path now resolves to the absolute system path /some/path. For relative paths, use sqlite3:some/path instead. (Previously, sqlite3:///some/path resolved to the relative path some/path. This behaviour was deprecated on Rails 4.1.) (Pull Request)

  • Introduced #validate as an alias for #valid?. (Pull Request)

  • #touch now accepts multiple attributes to be touched at once. (Pull Request)

  • Added support for fractional seconds for MySQL 5.6 and above. (Pull Request 1, 2)

  • Added support for the citext column type in PostgreSQL adapter. (Pull Request)

  • Added support for user-created range types in PostgreSQL adapter. (Commit)

Active Model

Please refer to the Changelog for detailed changes.

Notable changes

  • Introduced #validate as an alias for #valid?. (Pull Request)

Active Support

Please refer to the Changelog for detailed changes.

Removals

  • Removed deprecated Numeric#ago, Numeric#until, Numeric#since, Numeric#from_now. (Commit)

  • Removed deprecated string based terminators for ActiveSupport::Callbacks. (Pull Request)

Deprecations

  • Deprecated Class#superclass_delegating_accessor, use Class#class_attribute instead. (Pull Request)

  • Deprecated ActiveSupport::SafeBuffer#prepend! as ActiveSupport::SafeBuffer#prepend now performs the same function. (Pull Request)

Notable changes

  • The humanize inflector helper now strips any leading underscores. (Commit)

  • Added SecureRandom::uuid_v3 and SecureRandom::uuid_v5. (Pull Request)

  • Introduce Concern#class_methods as an alternative to module ClassMethods, as well as Kernel#concern to avoid the module Foo; extend ActiveSupport::Concern; end boilerplate. (Commit)

Credits

See the full list of contributors to Rails for the many people who spent many hours making Rails, the stable and robust framework it is. Kudos to all of them.