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 専用アプリケーションを作成するために使用することができます。 これは、Twitter や GitHub API のような公開向けおよびカスタムアプリケーション向けの API を提供するために役立ちます。
次のコマンドを使用して、新しい API Rails アプリを生成できます:
$ rails new my_api --api
これにより、次の3つの主なことが行われます:
- アプリケーションを通常よりも制限されたミドルウェアのセットで開始するように設定します。具体的には、デフォルトではブラウザアプリケーションに主に有用なミドルウェア(クッキーサポートなど)は含まれません。
ApplicationController
をActionController::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
と入力します。
テストランナーは、RSpec
、minitest-reporters
、maxitest
などに触発されています。
以下は、これらの注目すべき進歩のいくつかです:
- テストの行番号を使用して単一のテストを実行します。
- テストの行番号を指定して複数のテストを実行します。
- 失敗メッセージが改善され、失敗したテストを再実行しやすくなります。
-f
オプションを使用して、テストの実行中に失敗が発生した場合にすぐにテストを停止します。スイートの完了を待つのではなく。-d
オプションを使用して、完全なテスト実行の終了までテストの出力を遅延させます。-b
オプションを使用して、完全な例外のバックトレース出力を行います。- minitestとの統合により、テストシードデータのための
-s
オプション、名前で特定のテストを実行するための-n
オプション、より良い詳細な出力のための-v
オプションなどのオプションを使用できます。 - カラー表示されたテストの出力。
3 Railties
詳細な変更については、変更履歴を参照してください。
3.1 削除された機能
- デバッガーサポートが削除されました。代わりにbyebugを使用してください。
debugger
はRuby 2.2ではサポートされていません。 (commit) 廃止された
test:all
とtest:all:db
タスクを削除しました。 (commit)廃止された
Rails::Rack::LogTailer
を削除しました。 (commit)廃止された
RAILS_CACHE
定数を削除しました。 (commit)廃止された
serve_static_assets
設定を削除しました。 (commit)doc:app
、doc:rails
、およびdoc:guides
のドキュメンテーションタスクを削除しました。 (commit)デフォルトのスタックから
Rack::ContentLength
ミドルウェアを削除しました。 (Commit)
3.2 廃止予定
config.static_cache_control
をconfig.public_file_server.headers
に置き換えるために、config.static_cache_control
を廃止しました。 (Pull Request)config.serve_static_files
をconfig.public_file_server.enabled
に置き換えるために、config.serve_static_files
を廃止しました。 (Pull Request)rails
タスク名前空間のタスクをapp
名前空間のタスクに置き換えるために、rails:update
とrails:template
タスクをapp:update
とapp: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_to
とrespond_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)assigns
とassert_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 :back
をredirect_back
に廃止予定しました。fallback_location
引数を必須とし、RedirectBackError
の可能性を排除します。 (Pull Request)ActionDispatch::IntegrationTest
とActionController::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_ssl
とconfig.ssl_options
に簡単にオプトインできるようにし、試すのが危険ではなく無効化しやすくしました。 (プルリクエスト)ActionDispatch::Static
に任意のヘッダーを返す機能を追加しました。 (プルリクエスト)protect_from_forgery
のデフォルトのprependをfalse
に変更しました。 (コミット)ActionController::TestCase
はRails 5.1で独自のgemに移動されます。代わりにActionDispatch::IntegrationTest
を使用してください。 (コミット)Railsはデフォルトで弱いETagを生成するようになりました。 (プルリクエスト)
明示的な
render
呼び出しがなく、対応するテンプレートもないコントローラーアクションは、エラーを発生させる代わりにhead :no_content
を暗黙的にレンダリングします。 (プルリクエスト 1、2)フォームごとのCSRFトークンのオプションを追加しました。 (プルリクエスト)
統合テストにリクエストのエンコーディングとレスポンスの解析を追加しました。 (プルリクエスト)
ActionController#helpers
を追加して、コントローラーレベルでビューコンテキストにアクセスできるようにしました。 (プルリクエスト)削除されたフラッシュメッセージはセッションに保存される前に削除されます。 (プルリクエスト)
fresh_when
およびstale?
にレコードのコレクションを渡すサポートを追加しました。 (プルリクエスト)ActionController::Live
がActiveSupport::Concern
になりました。これにより、ActionController::Live
を他のモジュールに単純に含めることはできず、それらをActiveSupport::Concern
またはActionController::Live
で拡張する必要があります。また、ミドルウェアがスポーンされたスレッドによってスローされる:warden
をキャッチできないため、特別なWarden
/Devise
認証失敗処理コードを含めるために別のモジュールを使用している場合もあります。 (この問題の詳細はこちら)Response#strong_etag=
と#weak_etag=
、およびfresh_when
とstale?
に対応するオプションを導入しました。 (プルリクエスト)
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 削除
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_class
とsymbolized_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#tables
、SchemaCache#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_batches
にend
オプションを追加し、start
パラメータと組み合わせてバッチ処理の停止位置を指定できるようにしました。 (プルリクエスト)
7.3 注目すべき変更点
テーブル作成時に
references
にforeign_key
オプションを追加しました。 (コミット)新しい属性APIを追加しました。 (コミット)
ActiveRecord::Relation
に#cache_key
を追加しました。 (プルリクエスト)timestamps
のデフォルトのnull
値をfalse
に変更しました。 (コミット)ActiveRecord::SecureToken
を追加し、SecureRandom
を使用してモデルの属性の一意のトークンを生成するためのカプセル化を行いました。 (プルリクエスト)drop_table
にif_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_sources
とconnection.data_source_exists?
を追加しました。 これらのメソッドは、Active Recordモデル(通常はテーブルとビュー)をバックエンドとして使用できる関係を決定します。 (プルリクエスト)フィクスチャファイルでYAMLファイル自体にモデルクラスを設定できるようにしました。 (プルリクエスト)
データベースマイグレーションを生成する際にデフォルトで
uuid
をプライマリキーに設定できるようにしました。 (プルリクエスト)ActiveRecord::Relation#left_joins
とActiveRecord::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.yml
でprepared_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 削除
廃止予定の
ActiveModel::Dirty#reset_#{attribute}
とActiveModel::Dirty#reset_changes
を削除しました。 (プルリクエスト)XML シリアライズを削除しました。この機能は activemodel-serializers-xml gem に抽出されました。 (プルリクエスト)
ActionController::ModelNaming
モジュールを削除しました。 (プルリクエスト)
8.2 廃止予定
Active Model および
ActiveModel::Validations
コールバックチェーンを停止するための方法としてfalse
を返すことを廃止しました。推奨される方法はthrow(:abort)
です。 (プルリクエスト)不一致な動作を持つ
ActiveModel::Errors#get
、ActiveModel::Errors#set
、ActiveModel::Errors#[]=
メソッドを廃止しました。 (プルリクエスト)validates_length_of
の:tokenizer
オプションを廃止し、プレーンな Ruby を使用するようにしました。 (プルリクエスト)ActiveModel::Errors#add_on_empty
とActiveModel::Errors#add_on_blank
を廃止し、代替方法はありません。 (プルリクエスト)
8.3 注目すべき変更
失敗したバリデータを特定するための
ActiveModel::Errors#details
を追加しました。 (プルリクエスト)ActiveRecord::AttributeAssignment
をActiveModel::AttributeAssignment
に抽出し、それをインクルード可能なモジュールとして任意のオブジェクトで使用できるようにしました。 (プルリクエスト)モデルが保存された後に記録された変更にアクセスするための
ActiveModel::Dirty#[attr_name]_previously_changed?
とActiveModel::Dirty#[attr_name]_previous_change
を追加しました。 (プルリクエスト)valid?
およびinvalid?
で複数のコンテキストを同時に検証するように変更しました。 (プルリクエスト)validates_acceptance_of
を1
に加えてtrue
をデフォルト値として受け入れるように変更しました。 (プルリクエスト)Active Job
詳細な変更については、Changelogを参照してください。
8.4 注目すべき変更点
ActiveJob::Base.deserialize
はジョブクラスに委譲されます。これにより、ジョブがシリアライズされる際に任意のメタデータを添付し、実行される際にそれを読み取ることができます。 (Pull Request)各ジョブに影響を与えることなく、ジョブごとにキューアダプタを設定できるようになりました。 (Pull Request)
生成されたジョブはデフォルトで
app/jobs/application_job.rb
を継承します。 (Pull Request)DelayedJob
、Sidekiq
、qu
、que
、queue_classic
がprovider_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_stderr
、silence_stream
、capture
、quietly
を削除しました。 (commit)廃止予定の
active_support/core_ext/big_decimal/yaml_conversions
ファイルを削除しました。 (commit)廃止予定のメソッド
ActiveSupport::Cache::Store.instrument
とActiveSupport::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 廃止予定
MissingSourceFile
をLoadError
に代わって廃止予定にしました。 (commit)alias_method_chain
をRuby 2.0で導入されたModule#prepend
に代わって廃止予定にしました。 (Pull Request)ActiveSupport::Concurrency::Latch
を廃止予定にし、concurrent-rubyのConcurrent::CountDownLatch
を使用するようにしました。 (Pull Request)number_to_human_size
のprefix
オプションを廃止予定にし、代替方法はありません。 (Pull Request)Module#qualified_const_
を廃止予定にし、組み込みのModule#const_
メソッドを使用するようにしました。 (Pull Request)コールバックを定義する際に文字列を渡すことを廃止予定にしました。 (Pull Request)
ActiveSupport::Cache::Store#namespaced_key
、ActiveSupport::Cache::MemCachedStore#escape_key
、ActiveSupport::Cache::FileStore#key_file_path
を廃止予定にしました。代わりにnormalize_key
を使用してください。 (Pull Request, commit)ActiveSupport::Cache::LocaleCache#set_cache_value
をwrite_cache_value
に置き換えるように非推奨化しました。 (プルリクエスト)assert_nothing_raised
への引数の渡し方を非推奨化しました。 (プルリクエスト)Module.local_constants
をModule.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)Date
、Time
、DateTime
に#on_weekend?
、#on_weekday?
、#next_weekday
、#prev_weekday
メソッドを追加しました。 (プルリクエスト, プルリクエスト)Date
、Time
、DateTime
に#next_week
と#prev_week
にsame_time
オプションを追加しました。 (プルリクエスト)Date
、Time
、DateTime
の#yesterday
と#tomorrow
に対する#prev_day
と#next_day
の対応を追加しました。 (プルリクエスト)ランダムなbase58文字列を生成するための
SecureRandom.base58
を追加しました。 (commit)ActiveSupport::TestCase
にfile_fixture
を追加しました。これはテストケースでサンプルファイルにアクセスするための簡単なメカニズムを提供します。 (プルリクエスト)Enumerable
とArray
に#without
を追加し、指定した要素を除いた列挙可能なコピーを返すようにしました。 (プルリクエスト)ActiveSupport::ArrayInquirer
とArray#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::Executor
とActiveSupport::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フォーラムで大歓迎です。