edge
詳細はrubyonrails.orgで: もっとRuby on Rails

Ruby on Rails 5.0 リリースノート

Rails 5.0 のハイライト:

これらのリリースノートは主要な変更のみをカバーしています。さまざまなバグ修正や変更については、changelog を参照するか、GitHub 上のメインの Rails リポジトリの コミットのリスト をチェックしてください。

1 Rails 5.0 へのアップグレード

既存のアプリケーションをアップグレードする場合は、アップグレードする前に十分なテストカバレッジを持つことが重要です。また、Rails 5.0 への更新を試みる前に、まず Rails 4.2 にアップグレードし、アプリケーションが予想どおりに動作することを確認してください。アップグレード時に注意するべき事項のリストは、Upgrading Ruby on Rails ガイドで入手できます。

2 主な機能

2.1 Action Cable

Action Cable は、Rails 5 で導入された新しいフレームワークです。これにより、WebSockets を他の Rails アプリケーションとシームレスに統合することができます。

Action Cable は、リアルタイムの機能を、Rails アプリケーションの他の部分と同じスタイルと形式で Ruby で記述することができます。また、パフォーマンスとスケーラビリティも備えています。これは、クライアント側の JavaScript フレームワークとサーバ側の Ruby フレームワークの両方を提供するフルスタックのオファリングです。Active Record や選択した ORM で記述されたフルドメインモデルにアクセスすることができます。

詳細については、Action Cable の概要 ガイドを参照してください。

2.2 API アプリケーション

Rails は、スリム化された API 専用アプリケーションを作成するために使用することができます。 これは、TwitterGitHub API のような公開向けおよびカスタムアプリケーション向けの API を提供するために役立ちます。

次のコマンドを使用して、新しい API Rails アプリを生成できます:

$ rails new my_api --api

これにより、次の3つの主なことが行われます:

  • アプリケーションを通常よりも制限されたミドルウェアのセットで開始するように設定します。具体的には、デフォルトではブラウザアプリケーションに主に有用なミドルウェア(クッキーサポートなど)は含まれません。
  • ApplicationControllerActionController::BaseではなくActionController::APIから継承するようにします。ミドルウェアと同様に、これにより、ブラウザアプリケーションで主に使用される機能を提供するAction Controllerモジュールが除外されます。
  • 新しいリソースを生成する際に、ビュー、ヘルパー、アセットの生成をスキップするようにジェネレータを設定します。

このアプリケーションは、APIの基盤を提供し、その後、アプリケーションのニーズに応じて機能を組み込むように設定することができます

詳細については、API専用アプリケーションのRailsの使用方法ガイドを参照してください。

2.3 Active Record属性API

モデルにタイプ付きの属性を定義します。必要に応じて既存の属性のタイプを上書きします。 これにより、モデルに割り当てられたときに値がSQLに変換される方法を制御することができます。 また、ActiveRecord::Base.whereに渡される値の動作も変更されます。これにより、Active Recordの多くの部分でドメインオブジェクトを使用できるようになり、実装の詳細やモンキーパッチに頼る必要がありません。

これによって実現できることの一部:

  • Active Recordによって検出されるタイプを上書きできます。
  • デフォルト値も指定できます。
  • 属性はデータベースのカラムでバックアップする必要はありません。
# db/schema.rb
create_table :store_listings, force: true do |t|
  t.decimal :price_in_cents
  t.string :my_string, default: "original default"
end
# app/models/store_listing.rb
class StoreListing < ActiveRecord::Base
end
store_listing = StoreListing.new(price_in_cents: '10.1')

# before
store_listing.price_in_cents # => BigDecimal.new(10.1)
StoreListing.new.my_string # => "original default"

class StoreListing < ActiveRecord::Base
  attribute :price_in_cents, :integer # カスタムタイプ
  attribute :my_string, :string, default: "new default" # デフォルト値
  attribute :my_default_proc, :datetime, default: -> { Time.now } # デフォルト値
  attribute :field_without_db_column, :integer, array: true
end

# after
store_listing.price_in_cents # => 10
StoreListing.new.my_string # => "new default"
StoreListing.new.my_default_proc # => 2015-05-30 11:04:48 -0600
model = StoreListing.new(field_without_db_column: ["1", "2", "3"])
model.attributes # => {field_without_db_column: [1, 2, 3]}

カスタムタイプの作成:

値のタイプで定義されたメソッドに応答する限り、独自のカスタムタイプを定義することができます。メソッドdeserializeまたはcastは、データベースやコントローラからの生の入力とともに、タイプオブジェクトで呼び出されます。これは、Moneyデータなどのカスタム変換を行う場合に便利です。

クエリの実行:

ActiveRecord::Base.whereが呼び出されると、モデルクラスで定義されたタイプが使用され、値がSQLに変換されるために、タイプオブジェクトでserializeが呼び出されます。

これにより、オブジェクトはSQLクエリを実行する際に値を変換する方法を指定できます。

Dirty Tracking(変更の追跡):

属性のタイプは、Dirty Tracking(変更の追跡)の方法を変更することができます。

詳細な説明については、ドキュメントを参照してください。

2.4 テストランナー

Railsからテストを実行する機能を強化するために、新しいテストランナーが導入されました。 このテストランナーを使用するには、単純にbin/rails testと入力します。

テストランナーは、RSpecminitest-reportersmaxitestなどに触発されています。 以下は、これらの注目すべき進歩のいくつかです:

  • テストの行番号を使用して単一のテストを実行します。
  • テストの行番号を指定して複数のテストを実行します。
  • 失敗メッセージが改善され、失敗したテストを再実行しやすくなります。
  • -fオプションを使用して、テストの実行中に失敗が発生した場合にすぐにテストを停止します。スイートの完了を待つのではなく。
  • -dオプションを使用して、完全なテスト実行の終了までテストの出力を遅延させます。
  • -bオプションを使用して、完全な例外のバックトレース出力を行います。
  • minitestとの統合により、テストシードデータのための-sオプション、名前で特定のテストを実行するための-nオプション、より良い詳細な出力のための-vオプションなどのオプションを使用できます。
  • カラー表示されたテストの出力。

3 Railties

詳細な変更については、変更履歴を参照してください。

3.1 削除された機能

  • デバッガーサポートが削除されました。代わりにbyebugを使用してください。debuggerはRuby 2.2ではサポートされていません。 (commit)
  • 廃止された test:alltest:all:db タスクを削除しました。 (commit)

  • 廃止された Rails::Rack::LogTailer を削除しました。 (commit)

  • 廃止された RAILS_CACHE 定数を削除しました。 (commit)

  • 廃止された serve_static_assets 設定を削除しました。 (commit)

  • doc:appdoc:rails、および doc:guides のドキュメンテーションタスクを削除しました。 (commit)

  • デフォルトのスタックから Rack::ContentLength ミドルウェアを削除しました。 (Commit)

3.2 廃止予定

  • config.static_cache_controlconfig.public_file_server.headers に置き換えるために、config.static_cache_control を廃止しました。 (Pull Request)

  • config.serve_static_filesconfig.public_file_server.enabled に置き換えるために、config.serve_static_files を廃止しました。 (Pull Request)

  • rails タスク名前空間のタスクを app 名前空間のタスクに置き換えるために、rails:updaterails:template タスクを app:updateapp:template に名前変更しました。 (Pull Request)

3.3 注目すべき変更点

  • Rails テストランナー bin/rails test を追加しました。 (Pull Request)

  • 新しく生成されたアプリケーションとプラグインには、Markdown 形式の README.md が追加されます。 (commit, Pull Request)

  • bin/rails restart タスクを追加し、tmp/restart.txt をタッチして Rails アプリを再起動します。 (Pull Request)

  • bin/rails initializers タスクを追加し、Rails によって呼び出される順序で定義されたすべての初期化子を表示します。 (Pull Request)

  • 開発モードでキャッシュを有効または無効にするための bin/rails dev:cache を追加しました。 (Pull Request)

  • 開発環境を自動的に更新するための bin/update スクリプトを追加しました。 (Pull Request)

  • Rake タスクを bin/rails を介してプロキシします。 (Pull Request, Pull Request)

  • 新しいアプリケーションは、Linux と macOS でイベント駆動型のファイルシステムモニターが有効になります。ジェネレータに --skip-listen を渡すことで、この機能を無効にすることもできます。 (commit, commit)

  • 新しいアプリケーションでは、環境変数 RAILS_LOG_TO_STDOUT を使用して、本番環境で STDOUT にログを出力するオプションが追加されました。 (Pull Request)

  • 新しいアプリケーションに対して IncludeSubdomains ヘッダを使用して HSTS を有効にしました。 (Pull Request)

  • アプリケーションジェネレータは、Spring が追加の共通ファイルを監視するようにする新しいファイル config/spring.rb を書き込みます。 (commit)

  • 新しいアプリを生成する際に Action Mailer をスキップするための --skip-action-mailer を追加しました。 (Pull Request)

  • tmp/sessions ディレクトリとそれに関連するクリア rake タスクを削除しました。 (Pull Request)

  • スキャフォールドジェネレータによって生成される _form.html.erb をローカル変数を使用するように変更しました。 (Pull Request)

  • 本番環境でのクラスの自動読み込みを無効化しました。 (commit)

4 アクションパック

詳細な変更については、変更履歴を参照してください。

4.1 削除

  • ActionDispatch::Request::Utils.deep_mungeを削除しました。 (commit)

  • ActionController::HideActionsを削除しました。 (Pull Request)

  • respond_torespond_withのプレースホルダメソッドを削除しました。この機能は responders gemに抽出されました。 (commit)

  • 廃止予定のアサーションファイルを削除しました。 (commit)

  • URLヘルパーでの文字列キーの使用を廃止しました。 (commit)

  • *_pathヘルパーのonly_pathオプションを廃止しました。 (commit)

  • 廃止予定のNamedRouteCollection#helpersを削除しました。 (commit)

  • :toオプションに#を含まないルートの定義を廃止しました。 (commit)

  • 廃止予定のActionDispatch::Response#to_aryを削除しました。 (commit)

  • 廃止予定のActionDispatch::Request#deep_mungeを削除しました。 (commit)

  • 廃止予定のActionDispatch::Http::Parameters#symbolized_path_parametersを削除しました。 (commit)

  • コントローラーテストでの廃止予定のuse_routeオプションを削除しました。 (commit)

  • assignsassert_templateを削除しました。両メソッドは rails-controller-testing gemに抽出されました。 (Pull Request)

4.2 廃止予定

  • *_filterコールバックをすべて*_actionコールバックに廃止予定にしました。 (Pull Request)

  • *_via_redirect統合テストメソッドを廃止予定にしました。同じ動作をするために、リクエスト呼び出し後に手動でfollow_redirect!を使用してください。 (Pull Request)

  • AbstractController#skip_action_callbackを個別のskip_callbackメソッドに対して廃止予定にしました。 (Pull Request)

  • renderメソッドの:nothingオプションを廃止予定にしました。 (Pull Request)

  • headメソッドの最初のパラメータをHashとデフォルトのステータスコードとして渡すことを廃止予定にしました。 (Pull Request)

  • ミドルウェアクラス名に対して文字列やシンボルを使用することを廃止予定にしました。代わりにクラス名を使用してください。 (commit)

  • MIMEタイプへのアクセスに定数を使用することを廃止予定にしました(例:Mime::HTML)。代わりに、シンボルを使用した添字演算子を使用してください(例:Mime[:html])。 (Pull Request)

  • redirect_to :backredirect_backに廃止予定しました。fallback_location引数を必須とし、RedirectBackErrorの可能性を排除します。 (Pull Request)

  • ActionDispatch::IntegrationTestActionController::TestCaseは、位置引数をキーワード引数に対して廃止予定にしました。 (Pull Request)

  • :controller:actionのパスパラメータを廃止予定にしました。 (Pull Request)

  • コントローラーインスタンスでのenvメソッドを廃止予定にしました。 (commit)

  • ActionDispatch::ParamsParserは廃止予定であり、ミドルウェアスタックから削除されました。パラメータパーサーを設定するには、ActionDispatch::Request.parameter_parsers=を使用してください。 (commit, commit)

    注目すべき変更点

  • ActionController::Rendererを追加して、コントローラーアクション以外でも任意のテンプレートをレンダリングできるようにしました。 (プルリクエスト

  • ActionController::TestCaseおよびActionDispatch::IntegrationのHTTPリクエストメソッドでキーワード引数の構文を使用するように移行しました。 (プルリクエスト

  • Action Controllerにhttp_cache_foreverを追加し、期限切れにならないレスポンスをキャッシュできるようにしました。 (プルリクエスト

  • リクエストのバリアントにより簡単にアクセスできるようにしました。 (プルリクエスト

  • 対応するテンプレートがないアクションの場合、エラーを発生させる代わりにhead :no_contentをレンダリングするようにしました。 (プルリクエスト

  • コントローラーのデフォルトフォームビルダーをオーバーライドできるようにしました。 (プルリクエスト

  • API専用のアプリケーションをサポートするようにしました。 この種のアプリケーションには、ActionController::Baseの代わりにActionController::APIが追加されました。 (プルリクエスト

  • ActionController::ParametersはもはやHashWithIndifferentAccessを継承しないようにしました。 (プルリクエスト

  • config.force_sslconfig.ssl_optionsに簡単にオプトインできるようにし、試すのが危険ではなく無効化しやすくしました。 (プルリクエスト

  • ActionDispatch::Staticに任意のヘッダーを返す機能を追加しました。 (プルリクエスト

  • protect_from_forgeryのデフォルトのprependをfalseに変更しました。 (コミット

  • ActionController::TestCaseはRails 5.1で独自のgemに移動されます。代わりにActionDispatch::IntegrationTestを使用してください。 (コミット

  • Railsはデフォルトで弱いETagを生成するようになりました。 (プルリクエスト

  • 明示的なrender呼び出しがなく、対応するテンプレートもないコントローラーアクションは、エラーを発生させる代わりにhead :no_contentを暗黙的にレンダリングします。 (プルリクエスト 12

  • フォームごとのCSRFトークンのオプションを追加しました。 (プルリクエスト

  • 統合テストにリクエストのエンコーディングとレスポンスの解析を追加しました。 (プルリクエスト

  • ActionController#helpersを追加して、コントローラーレベルでビューコンテキストにアクセスできるようにしました。 (プルリクエスト

  • 削除されたフラッシュメッセージはセッションに保存される前に削除されます。 (プルリクエスト

  • fresh_whenおよびstale?にレコードのコレクションを渡すサポートを追加しました。 (プルリクエスト

  • ActionController::LiveActiveSupport::Concernになりました。これにより、ActionController::Liveを他のモジュールに単純に含めることはできず、それらをActiveSupport::ConcernまたはActionController::Liveで拡張する必要があります。また、ミドルウェアがスポーンされたスレッドによってスローされる:wardenをキャッチできないため、特別なWarden/Devise認証失敗処理コードを含めるために別のモジュールを使用している場合もあります。 (この問題の詳細はこちら

  • Response#strong_etag=#weak_etag=、およびfresh_whenstale?に対応するオプションを導入しました。 (プルリクエスト)

5 Action View

詳細な変更内容については、変更履歴を参照してください。

5.1 削除

  • AbstractController::Base::parent_prefixesを非推奨としました。 (コミット)

  • ActionView::Helpers::RecordTagHelperを削除しました。この機能は record_tag_helper gemに抽出されました。 (プルリクエスト)

  • translateヘルパーのrescue_formatオプションを削除しました。これはI18nでサポートされなくなったためです。 (プルリクエスト)

5.2 注目すべき変更

  • デフォルトのテンプレートハンドラをERBからRawに変更しました。 (コミット)

  • コレクションのレンダリングは複数のパーシャルをキャッシュし、一度に取得できるようになりました。 (プルリクエスト, コミット)

  • 明示的な依存関係にワイルドカードマッチングを追加しました。 (プルリクエスト)

  • disable_withをsubmitタグのデフォルトの動作にしました。送信時にボタンを無効にして二重送信を防止します。 (プルリクエスト)

  • パーシャルテンプレート名はもはや有効なRuby識別子である必要はありません。 (コミット)

  • datetime_tagヘルパーは、datetime-localのタイプを持つ入力タグを生成するようになりました。 (プルリクエスト)

  • render partial:ヘルパーでブロックを許可するようにしました。 (プルリクエスト)

6 Action Mailer

詳細な変更内容については、変更履歴を参照してください。

6.1 削除

  • メールビューでの非推奨の*_pathヘルパーを削除しました。 (コミット)

  • 非推奨のdeliverおよびdeliver!メソッドを削除しました。 (コミット)

6.2 注目すべき変更

  • テンプレートの検索はデフォルトのロケールとI18nのフォールバックを尊重するようになりました。 (コミット)

  • ジェネレータを介して作成されたメーラーに_mailerサフィックスを追加しました。これはコントローラとジョブで使用されている命名規則に従います。 (プルリクエスト)

  • assert_enqueued_emailsおよびassert_no_enqueued_emailsを追加しました。 (プルリクエスト)

  • config.action_mailer.deliver_later_queue_name設定を追加し、メーラーキューの名前を設定できるようにしました。 (プルリクエスト)

  • Action Mailerビューでフラグメントキャッシュをサポートしました。 テンプレートがキャッシュを実行するかどうかを決定するための新しい設定オプションconfig.action_mailer.perform_cachingを追加しました。 (プルリクエスト)

7 Active Record

詳細な変更内容については、変更履歴を参照してください。

7.1 削除

  • ネストされた配列をクエリ値として渡すことを許可する非推奨の動作を削除しました。 (プルリクエスト)

  • 非推奨のActiveRecord::Tasks::DatabaseTasks#load_schemaを削除しました。このメソッドはActiveRecord::Tasks::DatabaseTasks#load_schema_forに置き換えられました。 (コミット)

  • 廃止されたserialized_attributesを削除しました。 (commit)

  • has_many :throughでの廃止された自動カウンターキャッシュを削除しました。 (commit)

  • 廃止されたsanitize_sql_hash_for_conditionsを削除しました。 (commit)

  • 廃止されたReflection#source_macroを削除しました。 (commit)

  • 廃止されたsymbolized_base_classsymbolized_sti_nameを削除しました。 (commit)

  • 廃止されたActiveRecord::Base.disable_implicit_join_references=を削除しました。 (commit)

  • 文字列アクセサを使用した接続仕様へのアクセスの廃止を削除しました。 (commit)

  • インスタンス依存の関連を事前に読み込むための廃止されたサポートを削除しました。 (commit)

  • 排他的な下限値を持つPostgreSQLの範囲の廃止されたサポートを削除しました。 (commit)

  • キャッシュされたArelでリレーションを変更する際の廃止を削除しました。 代わりにImmutableRelationエラーが発生します。 (commit)

  • ActiveRecord::Serialization::XmlSerializerをコアから削除しました。この機能は activemodel-serializers-xml gemに抽出されました。 (Pull Request)

  • コアからレガシーなmysqlデータベースアダプタのサポートを削除しました。ほとんどのユーザーは mysql2を使用できるはずです。メンテナンスを引き継いでくれる人が見つかった場合、別のgemに変換されます。 (Pull Request 1, Pull Request 2)

  • protected_attributes gemのサポートを削除しました。 (commit)

  • PostgreSQLのバージョン9.1未満のサポートを削除しました。 (Pull Request)

  • activerecord-deprecated_finders gemのサポートを削除しました。 (commit)

  • ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES定数を削除しました。 (commit)

7.2 廃止予定

  • クエリの値としてクラスを渡すことを廃止しました。代わりに文字列を渡すようにしてください。 (Pull Request)

  • Active Recordコールバックチェーンを停止するためにfalseを返すことを廃止しました。 推奨される方法はthrow(:abort)です。 (Pull Request)

  • ActiveRecord::Base.errors_in_transactional_callbacks=を廃止しました。 (commit)

  • Relation#uniqの使用を廃止し、代わりにRelation#distinctを使用してください。 (commit)

  • PostgreSQLの:point型を廃止し、代わりにArrayではなくPointオブジェクトを返す新しい型にしました。 (Pull Request)

  • 関連メソッドに真の引数を渡すことで強制的に関連をリロードすることを廃止しました。 (Pull Request)

  • 関連restrict_dependent_destroyのエラーのキーを新しいキー名に変更しました。 (Pull Request)

  • #tablesの動作を同期化しました。 (Pull Request)

  • SchemaCache#tablesSchemaCache#table_exists?SchemaCache#clear_table_cache!を廃止し、 代わりに新しいデータソースの対応するメソッドを使用してください。 (Pull Request)

  • SQLite3およびMySQLアダプターのconnection.tablesを非推奨としました。 (プルリクエスト)

  • #tablesへの引数の渡し方を非推奨としました - 一部のアダプター(mysql2、sqlite3)の#tablesメソッドはテーブルとビューの両方を返し、他のアダプター(postgresql)はテーブルのみを返します。振る舞いを一貫させるため、将来的には#tablesはテーブルのみを返すようになります。 (プルリクエスト)

  • table_exists?を非推奨としました - #table_exists?メソッドはテーブルとビューの両方をチェックしていました。#tablesとの振る舞いを一貫させるため、将来的には#table_exists?はテーブルのみをチェックするようになります。 (プルリクエスト)

  • find_nthへのoffset引数の渡し方を非推奨としました。代わりにリレーションのoffsetメソッドを使用してください。 (プルリクエスト)

  • DatabaseStatements{insert|update|delete}_sqlを非推奨としました。代わりに{insert|update|delete}の公開メソッドを使用してください。 (プルリクエスト)

  • use_transactional_fixturesを明確さのためにuse_transactional_testsに非推奨としました。 (プルリクエスト)

  • ActiveRecord::Connection#quoteにカラムを渡すことを非推奨としました。 (コミット)

  • find_in_batchesendオプションを追加し、startパラメータと組み合わせてバッチ処理の停止位置を指定できるようにしました。 (プルリクエスト)

7.3 注目すべき変更点

  • テーブル作成時にreferencesforeign_keyオプションを追加しました。 (コミット)

  • 新しい属性APIを追加しました。 (コミット)

  • enum定義に:_prefix/:_suffixオプションを追加しました。 (プルリクエスト, プルリクエスト)

  • ActiveRecord::Relation#cache_keyを追加しました。 (プルリクエスト)

  • timestampsのデフォルトのnull値をfalseに変更しました。 (コミット)

  • ActiveRecord::SecureTokenを追加し、SecureRandomを使用してモデルの属性の一意のトークンを生成するためのカプセル化を行いました。 (プルリクエスト)

  • drop_tableif_existsオプションを追加しました。 (プルリクエスト)

  • ActiveRecord::Base#accessed_fieldsを追加しました。これは、データベースから必要なデータのみを選択する場合に、モデルから読み取られたフィールドを素早く特定するために使用できます。 (コミット)

  • ActiveRecord::Relation#orメソッドを追加し、WHEREまたはHAVING句を組み合わせるためにOR演算子を使用できるようにしました。 (コミット)

  • ActiveRecord::Base.suppressを追加し、指定されたブロック内でレシーバーの保存を防止します。 (プルリクエスト)

  • belongs_toは、関連が存在しない場合にデフォルトでバリデーションエラーを発生させるようになりました。optional: trueを使用して、個別の関連ごとにこれを無効にすることができます。また、requiredオプションをoptionalに非推奨としました。 (プルリクエスト)

  • db:structure:dumpの動作を設定するためにconfig.active_record.dump_schemasを追加しました。 (プルリクエスト

  • config.active_record.warn_on_records_fetched_greater_thanオプションを追加しました。 (プルリクエスト

  • MySQLでネイティブのJSONデータ型サポートを追加しました。 (プルリクエスト

  • PostgreSQLで同時にインデックスを削除するサポートを追加しました。 (プルリクエスト

  • 接続アダプターに#views#view_exists?メソッドを追加しました。 (プルリクエスト

  • Active Recordから一部のカラムを非表示にするためにActiveRecord::Base.ignored_columnsを追加しました。 (プルリクエスト

  • connection.data_sourcesconnection.data_source_exists?を追加しました。 これらのメソッドは、Active Recordモデル(通常はテーブルとビュー)をバックエンドとして使用できる関係を決定します。 (プルリクエスト

  • フィクスチャファイルでYAMLファイル自体にモデルクラスを設定できるようにしました。 (プルリクエスト

  • データベースマイグレーションを生成する際にデフォルトでuuidをプライマリキーに設定できるようにしました。 (プルリクエスト

  • ActiveRecord::Relation#left_joinsActiveRecord::Relation#left_outer_joinsを追加しました。 (プルリクエスト

  • after_{create,update,delete}_commitコールバックを追加しました。 (プルリクエスト

  • マイグレーションクラスに提示されるAPIのバージョンを付けることで、既存のマイグレーションを壊すことなく、パラメータのデフォルトを変更したり、非推奨のサイクルを経て書き直すことができるようにしました。 (プルリクエスト

  • ApplicationRecordは、アプリケーションのモデル全体の動作を設定するための単一の場所を提供する、アプリケーションモデルの新しいスーパークラスです。これは、アプリケーションコントローラがActionController::BaseではなくApplicationControllerをサブクラス化するのと同様です。 (プルリクエスト

  • ActiveRecordの#second_to_last#third_to_lastメソッドを追加しました。 (プルリクエスト

  • PostgreSQLのデータベースオブジェクト(テーブル、カラム、インデックス)にコメントを追加する機能を追加しました。これらのコメントはデータベースのメタデータに保存されます。 (プルリクエスト

  • mysql2アダプターにプリペアドステートメントのサポートを追加しました(mysql2 0.4.4+用)。以前は非推奨のmysqlレガシーアダプターでのみサポートされていました。有効にするには、config/database.ymlprepared_statements: trueを設定します。 (プルリクエスト

  • 関連オブジェクト上でActionRecord::Relation#updateを呼び出す機能を追加しました。これにより、関連するすべてのオブジェクトでバリデーションとコールバックが実行されます。 (プルリクエスト

  • saveメソッドにtouchオプションを追加し、タイムスタンプを更新せずにレコードを保存できるようにしました。 (プルリクエスト

  • PostgreSQLの式インデックスとオペレータクラスのサポートを追加しました。 (commit

  • ネストされた属性のエラーにインデックスを追加するための :index_errors オプションを追加しました。 (プルリクエスト)

  • 双方向の破棄依存関係のサポートを追加しました。 (プルリクエスト)

  • トランザクション内のテストで after_commit コールバックをサポートするようにしました。 (プルリクエスト)

  • テーブルに外部キーが存在するかどうかを確認するための foreign_key_exists? メソッドを追加しました。 (プルリクエスト)

  • touch メソッドに :time オプションを追加し、現在の時刻とは異なる時刻でレコードを更新するようにしました。 (プルリクエスト)

  • トランザクションコールバックのエラーをキャッチしないように変更しました。 この変更前では、トランザクションコールバック内で発生したエラーはキャッチされ、ログに表示されていましたが、 (新たに非推奨となった)raise_in_transactional_callbacks = true オプションを使用しない限り、 これらのエラーはもはやキャッチされずに上位に伝播するようになりました。

    これにより、他のコールバックと同様の動作になります。 (コミット)

8 Active Model

詳細な変更については、Changelog を参照してください。

8.1 削除

8.2 廃止予定

  • Active Model および ActiveModel::Validations コールバックチェーンを停止するための方法として false を返すことを廃止しました。推奨される方法は throw(:abort) です。 (プルリクエスト)

  • 不一致な動作を持つ ActiveModel::Errors#getActiveModel::Errors#setActiveModel::Errors#[]= メソッドを廃止しました。 (プルリクエスト)

  • validates_length_of:tokenizer オプションを廃止し、プレーンな Ruby を使用するようにしました。 (プルリクエスト)

  • ActiveModel::Errors#add_on_emptyActiveModel::Errors#add_on_blank を廃止し、代替方法はありません。 (プルリクエスト)

8.3 注目すべき変更

  • 失敗したバリデータを特定するための ActiveModel::Errors#details を追加しました。 (プルリクエスト)

  • ActiveRecord::AttributeAssignmentActiveModel::AttributeAssignment に抽出し、それをインクルード可能なモジュールとして任意のオブジェクトで使用できるようにしました。 (プルリクエスト)

  • モデルが保存された後に記録された変更にアクセスするための ActiveModel::Dirty#[attr_name]_previously_changed?ActiveModel::Dirty#[attr_name]_previous_change を追加しました。 (プルリクエスト)

  • valid? および invalid? で複数のコンテキストを同時に検証するように変更しました。 (プルリクエスト)

  • validates_acceptance_of1 に加えて true をデフォルト値として受け入れるように変更しました。 (プルリクエスト)

    Active Job

詳細な変更については、Changelogを参照してください。

8.4 注目すべき変更点

  • ActiveJob::Base.deserializeはジョブクラスに委譲されます。これにより、ジョブがシリアライズされる際に任意のメタデータを添付し、実行される際にそれを読み取ることができます。 (Pull Request)

  • 各ジョブに影響を与えることなく、ジョブごとにキューアダプタを設定できるようになりました。 (Pull Request)

  • 生成されたジョブはデフォルトでapp/jobs/application_job.rbを継承します。 (Pull Request)

  • DelayedJobSidekiqququequeue_classicprovider_job_idとしてジョブIDをActiveJob::Baseに返すようになりました。 (Pull Request, Pull Request, commit)

  • concurrent-rubyスレッドプールにジョブをキューイングするための単純なAsyncJobプロセッサと関連するAsyncAdapterを実装しました。 (Pull Request)

  • デフォルトのアダプタをインラインから非同期に変更しました。これは、テストが誤って同期的に発生する動作に依存しないようにするためのより良いデフォルトです。 (commit)

9 Active Support

詳細な変更については、Changelogを参照してください。

9.1 削除されたもの

  • 廃止予定のActiveSupport::JSON::Encoding::CircularReferenceErrorを削除しました。 (commit)

  • 廃止予定のメソッドActiveSupport::JSON::Encoding.encode_big_decimal_as_string=ActiveSupport::JSON::Encoding.encode_big_decimal_as_stringを削除しました。 (commit)

  • 廃止予定のActiveSupport::SafeBuffer#prependを削除しました。 (commit)

  • Kernelから廃止予定のメソッドsilence_stderrsilence_streamcapturequietlyを削除しました。 (commit)

  • 廃止予定のactive_support/core_ext/big_decimal/yaml_conversionsファイルを削除しました。 (commit)

  • 廃止予定のメソッドActiveSupport::Cache::Store.instrumentActiveSupport::Cache::Store.instrument=を削除しました。 (commit)

  • 廃止予定のClass#superclass_delegating_accessorを削除しました。代わりにClass#class_attributeを使用してください。 (Pull Request)

  • ThreadSafe::Cacheを削除しました。代わりにConcurrent::Mapを使用してください。 (Pull Request)

  • Ruby 2.2で実装されているため、Object#itselfを削除しました。 (Pull Request)

9.2 廃止予定

  • MissingSourceFileLoadErrorに代わって廃止予定にしました。 (commit)

  • alias_method_chainをRuby 2.0で導入されたModule#prependに代わって廃止予定にしました。 (Pull Request)

  • ActiveSupport::Concurrency::Latchを廃止予定にし、concurrent-rubyのConcurrent::CountDownLatchを使用するようにしました。 (Pull Request)

  • number_to_human_sizeprefixオプションを廃止予定にし、代替方法はありません。 (Pull Request)

  • Module#qualified_const_を廃止予定にし、組み込みのModule#const_メソッドを使用するようにしました。 (Pull Request)

  • コールバックを定義する際に文字列を渡すことを廃止予定にしました。 (Pull Request)

  • ActiveSupport::Cache::Store#namespaced_keyActiveSupport::Cache::MemCachedStore#escape_keyActiveSupport::Cache::FileStore#key_file_pathを廃止予定にしました。代わりにnormalize_keyを使用してください。 (Pull Request, commit)

  • ActiveSupport::Cache::LocaleCache#set_cache_valuewrite_cache_valueに置き換えるように非推奨化しました。 (プルリクエスト)

  • assert_nothing_raisedへの引数の渡し方を非推奨化しました。 (プルリクエスト)

  • Module.local_constantsModule.constants(false)に置き換えるように非推奨化しました。 (プルリクエスト)

9.3 注目すべき変更点

  • ActiveSupport::MessageVerifier#verified#valid_message?メソッドを追加しました。 (プルリクエスト)

  • コールバックチェーンを停止する方法を変更しました。今後は明示的にthrow(:abort)を使用してコールバックチェーンを停止することが推奨されます。 (プルリクエスト)

  • 新しい設定オプションconfig.active_support.halt_callback_chains_on_return_falseを追加しました。これにより、ActiveRecord、ActiveModel、ActiveModel::Validationsのコールバックチェーンを'before'コールバックでfalseを返すことで停止させるかどうかを指定できます。 (プルリクエスト)

  • デフォルトのテスト順序を:sortedから:randomに変更しました。 (commit)

  • DateTimeDateTime#on_weekend?#on_weekday?#next_weekday#prev_weekdayメソッドを追加しました。 (プルリクエスト, プルリクエスト)

  • DateTimeDateTime#next_week#prev_weeksame_timeオプションを追加しました。 (プルリクエスト)

  • DateTimeDateTime#yesterday#tomorrowに対する#prev_day#next_dayの対応を追加しました。 (プルリクエスト)

  • ランダムなbase58文字列を生成するためのSecureRandom.base58を追加しました。 (commit)

  • ActiveSupport::TestCasefile_fixtureを追加しました。これはテストケースでサンプルファイルにアクセスするための簡単なメカニズムを提供します。 (プルリクエスト)

  • EnumerableArray#withoutを追加し、指定した要素を除いた列挙可能なコピーを返すようにしました。 (プルリクエスト)

  • ActiveSupport::ArrayInquirerArray#inquiryを追加しました。 (プルリクエスト)

  • ActiveSupport::TimeZone#strptimeを追加し、指定したタイムゾーンからの時刻の解析を可能にしました。 (commit)

  • Integer#positive?Integer#negative?のクエリメソッドをInteger#zero?のように追加しました。 (commit)

  • ActiveSupport::OrderedOptionsのgetメソッドに、値が.blank?の場合にKeyErrorを発生させるバンドルバージョンを追加しました。 (プルリクエスト)

  • 指定した年の日数、または引数が指定されていない場合は現在の年の日数を返すTime.days_in_yearを追加しました。 (commit)

  • アプリケーションのソースコード、ルート、ロケールなどの変更を非同期に検出するためのイベント駆動型のファイルウォッチャーを追加しました。 (プルリクエスト)

  • スレッドごとに生存するクラスとモジュール変数を宣言するためのthread_m/cattr_accessor/reader/writerメソッドスイートを追加しました。 (プルリクエスト)

  • Array#second_to_lastメソッドとArray#third_to_lastメソッドを追加しました。 (プルリクエスト)

  • ActiveSupport::ExecutorActiveSupport::ReloaderのAPIを公開し、コンポーネントやライブラリがアプリケーションコードの実行や再読み込みプロセスに参加・管理できるようにしました。 (プルリクエスト)

  • ActiveSupport::DurationはISO8601形式のフォーマットとパースをサポートするようになりました。 (プルリクエスト)

  • ActiveSupport::JSON.decodeは、parse_json_timesが有効な場合にISO8601のローカル時刻のパースをサポートするようになりました。 (プルリクエスト)

  • ActiveSupport::JSON.decodeは、日付文字列に対してDateオブジェクトを返すようになりました。 (プルリクエスト)

  • TaggedLoggingに複数のロガーをインスタンス化する機能を追加し、それらがお互いのタグを共有しないようにしました。 (プルリクエスト)

10 クレジット

Railsの安定かつ堅牢なフレームワークになるために、多くの人々が多くの時間を費やした、Railsへの貢献者の完全なリストをご覧ください。彼ら全員に敬意を表します。

フィードバック

このガイドの品質向上にご協力ください。

タイポや事実の誤りを見つけた場合は、ぜひ貢献してください。 開始するには、ドキュメントへの貢献セクションを読んでください。

不完全なコンテンツや最新でない情報も見つかるかもしれません。 メインのドキュメントに不足しているドキュメントを追加してください。 修正済みかどうかは、まずEdge Guidesを確認してください。 スタイルと規約については、Ruby on Rails Guides Guidelinesを確認してください。

修正すべき点を見つけたが、自分で修正できない場合は、 問題を報告してください

そして最後に、Ruby on Railsのドキュメントに関するあらゆる議論は、公式のRuby on Railsフォーラムで大歓迎です。