Rails 4.2の注目ポイント
本リリースノートでは、主要な変更についてのみ説明します。ここに紹介されていない機能、バグ修正、変更の詳細についてはGitHubにあるRailsメインリポジトリのコミットリストを参照してください。
既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。Railのバージョンが4.1に達していない場合は、まずアプリケーションをRails 4.1にアップグレードし、アプリケーションが期待どおりに動作することを確認してからRails 4.2にアップグレードしてください。アップグレードの際に注意すべき点のリストについては、Ruby on Rails アップグレードガイドを参照してください。
Active Jobとは、Rails 4.2から採用された新しいフレームワークです。Active Jobは、Resque、Delayed Job、Sidekiqなど、さまざまなクエリシステムの最上位に位置するものです。
Active Job APIで記述されたジョブは、Active Jobがサポートするどのクエリシステムでもアダプタを介して実行できます。Active Jobは、ジョブを直ちに実行できるインラインランナー(inline runner)として最初から構成済みです。
ジョブの引数にActive Recordオブジェクトを与えたくなることはよくあります。Active Jobでは、オブジェクト参照をURI(uniform resource identifiers)として渡します。オブジェクト自身をマーシャリングしません。このURIは、Railsに新しく導入されたGlobal IDライブラリによって生成され、ジョブはこれを元にオブジェクトを参照します。Active Recordオブジェクトをジョブの引数として渡すと、内部的には単にGlobal IDが渡されます。
たとえば、trashable
というActive Recordオブジェクトがあるとすると、以下のようにシリアライズをまったく行わずにジョブに引き渡すことができます。
class TrashableCleanupJob < ActiveJob::Base def perform(trashable, depth) trashable.cleanup(depth) end end
詳細については、Active Jobの基礎を参照してください。
今回のリリースで、Action MailerはActive Jobの最上位に配置され、deliver_later
メソッドを用いてジョブキューからメールを送信可能になりました。これにより、キューを非同期(asynchronous)に設定すればコントローラやモデルの動作がキューによってブロックされなくなりました(ただしデフォルトのインラインキューではコントローラやモデルの動作はブロックされます)。
deliver_now
メソッドを使うと、メールを直ちに送信できます。
Adequate Recordとは、Active Recordの性能を向上させるさまざまな改良の総称であり、いわゆるfind
やfind_by
呼び出し、および一部の関連付けクエリの動作速度を最大2倍に向上させます。
この改善は、よく用いられるSQLクエリをSQLのプリペアドステートメント(prepared statement)としてキャッシュし、同様の呼び出しが発生した場合にそれを使い回すことによって行っています。これにより、以後の呼び出しでのクエリ生成作業の大半がスキップされるようになります。詳細については、Aaron Pattersonのブログ記事を参照してください。
Active Recordは、サポートされている動作に対してこのAdequate Recordを自動的に適用するので、コードや設定の変更など開発者が何かを行う必要はありません。Adequate Recordでサポートされている動作の例を以下に示します。
Post.find(1) # 最初の呼び出しで準備済みSQL文が生成およびキャッシュされる Post.find(2) # キャッシュされた準備済みSQL文は以後の呼び出しで再利用される Post.find_by_title('first post') Post.find_by_title('second post') post.comments post.comments(true)
上の例で、メソッド呼び出しで渡された値そのものは準備済みSQL文のキャッシュに含まれていない点にご注目ください。全体をキャッシュしているのではなく、キャッシュされたSQL文が値のプレースホルダーとなっており、値だけ差し替えられている点が重要です。
以下のような場合にはキャッシュは使われません。
find
で(単一のidではなく)idのリストを検索する。例:# キャッシュされない Post.find(1, 2, 3) Post.find([1,2])
find_by
でSQLフラグメントが使われているPost.find_by('published_at < ?', 2.weeks.ago)
Rails 4.2で新規生成したアプリケーションにはデフォルトでWeb Console gemが含まれるようになりました。Web Console gemはすべてのエラーページに対話操作可能なRubyコンソールを追加し、console
ビューとコントローラヘルパーメソッドを提供します。
エラーページで対話的コンソールが利用できるようになったことで、例外が発生したコンテキストで自由にコードを実行できるようになりました。console
ヘルパーは、画面出力が完了した最終的な状態のコンテキストで対話的コンソールを起動します。このヘルパーは、どのビューやコントローラからでも自由に呼び出すことができます。
マイグレーション用DSLで外部キーの追加・削除がサポートされました。今後は外部キーもschema.rb
にダンプされます。現時点では、外部キーがサポートされるのはmysql
、mysql2
、およびpostgresql
アダプタのみです。
# `authors.id`を参照する`articles.author_id`への外部キーを追加する add_foreign_key :articles, :authors # `users.lng_id`を参照する`articles.author_id`への外部キーを追加する add_foreign_key :articles, :users, column: :author_id, primary_key: "lng_id" # `accounts.branch_id`の外部キーを削除する remove_foreign_key :accounts, :branches # `accounts.owner_id`の外部キーを削除する remove_foreign_key :accounts, column: :owner_id
完全な説明については、APIドキュメントのadd_foreign_key およびremove_foreign_keyを参照してください。
前のバージョンで非推奨に指定されていた機能が削除されました。今回のリリースで新たに非推奨指定された機能については個別のコンポーネントの情報を参照してください。
以下の変更については、アップグレード時に対応が必要となることがあります。
render
に文字列の引数を与えた場合の挙動の変更以前は、コントローラのアクションでrender "foo/bar"
を呼び出すことはrender file: "foo/bar"
を呼び出すことと同等でした。この動作はRails 4.2から変更され、render template: "foo/bar"
と同等になりました。ファイルを指定したい場合は明示的にrender file: "foo/bar"
と書いてください。
respond_with
とクラスレベルのrespond_to
の扱いについてrespond_with
と、これに対応するクラスレベルのrespond_to
はresponders gemに移動されました。この機能を使いたい場合は、Gemfile
にgem "responders", "~> 2.0"
を追記してください。
# app/controllers/users_controller.rb class UsersController < ApplicationController respond_to :html, :json def show @user = User.find(params[:id]) respond_with @user end end
インスタンスレベルでのrespond_to
は影響を受けません。
# app/controllers/users_controller.rb class UsersController < ApplicationController def show @user = User.find(params[:id]) respond_to do |format| format.html format.json { render json: @user } end end end
rails server
のデフォルトホストRackの変更により、rails server
コマンドを実行した際のデフォルトのホストが0.0.0.0
からlocalhost
に変更されました。この変更は標準的なローカルでの開発ワークフローにほとんど影響を与えないはずです(http://127.0.0.1:3000
とhttp://localhost:3000
の振る舞いはどちらも以前と同じです)。
ただし、今回の変更により、別のPCからRailsサーバーへのアクセスは以前と同じようにはできなくなります。たとえば、development環境が仮想マシン上にあり、ホストマシンからこのdevelopment環境にアクセスする場合などがこれに該当します。
このような場合、サーバーを起動する際にrails server -b 0.0.0.0
とすることで、以前と同じ動作を再現できます。
以前の動作に戻す場合は、必ずファイアウォールを適切に設定し、自社ネットワーク内の信頼できるPCだけが開発用サーバーにアクセスできるようにしてください。
HTMLサニタイザはLoofahと Nokogiriをベースにした、より新しく堅固な実装に置き換えられました。新しいサニタイザはより安全で、かつ強力で柔軟性に富んでいます。
新しいアルゴリズムが採用されたことにより、特定の汚染された入力をサニタイズした結果が従来と異なる場合があります。
従来のサニタイザと完全に同じ結果を得たい場合は、rails-deprecated_sanitizer gemを
Gemfile
に追加することで従来と同じ結果を得られます。このgemはオプトイン(opt-in: 自らの責任で選ぶこと)であるため、非推奨の警告を表示しません。
rails-deprecated_sanitizer
のサポートはRails 4.2でしか行われないことにご注意ください。Rails 5.0ではメンテナンスされません。
新しいサニタイザの変更点の詳細については、このブログ記事を参照してください。
assert_select
assert_select
はNokogiriベースで実装されました。
これにより、以前は有効であったセレクタの一部がサポートされなくなりました。アプリケーションでこれらを使っている場合は、アプリケーションを変更する必要があります。
属性セレクタの値に英文字以外の文字が含まれる場合は、値を引用符で囲む必要が生じることがあります
# 以前の動作 a[href=/] a[href$=/] # 現在の動作 a[href="/"] a[href$="/"]
要素のネストが正しくないHTMLを含むHTMLソースから生成されたDOMでは結果が異なることがあります。
例:
# content: <div><i><p></i></div> # 以前の動作 assert_select('div > i') # => true assert_select('div > p') # => false assert_select('i > p') # => true # 現在の動作 assert_select('div > i') # => true assert_select('div > p') # => true assert_select('i > p') # => false
選択したデータに実体参照文字が含まれている場合、比較のために選択された値は以前は実体参照文字のまま(AT&T
など)でしたが、現在は
実体参照を評価してから比較するようになりました(AT&T
など)。
# <p>AT&T</p>の内容の扱い # 以前の動作 assert_select('p', 'AT&T') # => true assert_select('p', 'AT&T') # => false # 現在の動作 assert_select('p', 'AT&T') # => true assert_select('p', 'AT&T') # => false
変更の詳細についてはChangelogを参照してください。
アプリケーションのジェネレータから--skip-action-view
オプションが削除されました。
(プルリク)
rails application
コマンドは削除されました。他のコマンドへの置き換えは行われていません。
(プルリク)
production環境でconfig.log_level
を未設定のままにすることが非推奨になりました。
(プルリク)
rake test:all
が非推奨になりました。現在はrake test
の方が推奨されます(これによりtest
フォルダ以下のテストがすべて実行されます)。
(プルリク)
rake test:all:db
が非推奨になりました。現在はrake test:db
が推奨されます。
(プルリク)
Rails::Rack::LogTailer
は非推奨になりました。代替はありません。
(コミット)
web-console
がデフォルトのアプリケーションのGemfile
に導入されました。
(プルリク)
モデル関連付けをおこなうジェネレータにrequired
オプションが追加されました。
(プルリク)
カスタム設定オプションを定義する時に利用できるx
名前空間が導入されました。
# config/environments/production.rb config.x.payment_processing.schedule = :daily config.x.payment_processing.retries = 3 config.x.super_debugger = true
これらのオプションは、以下のようにconfigurationオブジェクト全体で利用できます。
Rails.configuration.x.payment_processing.schedule # => :daily Rails.configuration.x.payment_processing.retries # => 3 Rails.configuration.x.super_debugger # => true
(コミット)
現在の環境設定を読み込むためのRails::Application.config_for
が導入されました。
# config/exception_notification.yml: production: url: http://127.0.0.1:8080 namespace: my_app_production development: url: http://localhost:3001 namespace: my_app_development # config/production.rb Rails.application.configure do config.middleware.use ExceptionNotifier, config_for(:exception_notification) end
(プルリク)
アプリケーションのジェネレータに--skip-turbolinks
オプションが導入されました。これは生成時にTurbolinksを統合しないためのオプションです。
(コミット)
bin/setup
スクリプトが導入されました。これはアプリケーションの初期設定時に設定を自動化するためのコードの置き場所となります。
(プルリク)
development環境において、config.assets.digest
のデフォルト値がtrue
に変更されました。
(プルリク)
rake notes
に新しい拡張子を登録するためのAPIが導入されました。
(プルリク)
Railsテンプレートで使うafter_bundle
コールバックが導入されました。
(プルリク)
Rails.gem_version
メソッドが導入されました。これはGem::Version.new(Rails.version)
を簡単に得るためのものです。
(プルリク)
変更の詳細についてはChangelogを参照してください。
respond_with
とクラスレベルでのrespond_to
がRailsから外され、responders
gem(version 2.0)に切り出されました。引き続きこの機能を使う場合は、Gemfileにgem "responders", "~> 2.0"
を追加してください。
(プルリク、詳細)
非推奨のAbstractController::Helpers::ClassMethods::MissingHelperError
が削除されました。今後はAbstractController::Helpers::MissingHelperError
をお使いください。
(コミット)
*_path
ヘルパーでonly_path
オプションを利用することが非推奨になりました。
(コミット)
assert_tag
、assert_no_tag
、find_tag
、find_all_tag
が非推奨になりました。今後はassert_select
をお使いください。
(コミット)
ルーティングの:to
オプションで、#
という文字を含まないシンボルや文字列のサポートが非推奨になりました。
get '/posts', to: MyRackApp => (変更不要) get '/posts', to: 'post#index' => (変更不要) get '/posts', to: 'posts' => get '/posts', controller: :posts get '/posts', to: :index => get '/posts', action: :index
(コミット)
URLヘルパー内において、ハッシュのキーに文字列を使うことが非推奨になりました。例:
# 良くない例 root_path('controller' => 'posts', 'action' => 'index') # 良い例 root_path(controller: 'posts', action: 'index')
(プルリク)
*_filter
に関するメソッド群をドキュメントから削除しました。これらのメソッドの利用は推奨されていません。今後は*_action
をお使いください。
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
アプリケーションがこれらのメソッドに依存している場合は、*_action
に置き換える必要があります。これらのメソッドは今後非推奨になり、最終的にはRailsから削除される予定です。
render nothing: true
、およびbodyをnil
にしたレンダリングを行った場合にレスポンスのbodyを埋めていたスペース文字1つが追加されなくなりました。
(プルリク)
テンプレートのダイジェストを自動的にETagsに含めるようになりました。 (プルリク)
URLヘルパーに渡されるセグメントが自動的にエスケープされるようになりました。(コミット)
グローバルに使ってよいパラメータを指定するためのalways_permitted_parameters
が導入されました。この設定のデフォルト値は['controller', 'action']
です。
(プルリク)
*_fragment.action_controller
通知にペイロード上のコントローラ名とアクション名が含まれるようになりました。
(プルリク)
ルーティング探索があいまい一致した場合のRouting Errorページの表示が改良されました。 (プルリク)
CSRFによる失敗のログ出力を無効にするオプションが追加されました。 (プルリク)
Railsが静的なアセットを送信するように設定されている場合、ブラウザがgzip圧縮ファイルをサポートし、かつgzipファイル(.gz)がサーバーのディスク上にあれば、アセットのgzip圧縮がサポートされるようになりました。
アセットパイプラインは、圧縮可能なすべてのアセットから.gz
ファイルをデフォルトで生成するようになりました。gzip圧縮されたファイルを送信することで、通信量が最小化され、アセットへのリクエストが高速化されます。Railsがproduction環境でアセットを提供する場合は、必ずCDNを有効にしてください。
(プルリク)
結合テストの中でprocess
ヘルパーを呼び出すとき、パスの冒頭にスラッシュ(/
)が必要になりました。以前は省略可能でしたが、これは内部実装による副作用であり、意図的な機能ではありません。例:
test "list all posts" do get "/posts" assert_response :success end
変更の詳細についてはChangelogを参照してください。
AbstractController::Base.parent_prefixes
は非推奨になりました。ビューの検索対象を変更したい場合はAbstractController::Base.local_prefixes
をオーバーライドしてください。
(プルリク)
ActionView::Digestor#digest(name, format, finder, options = {})
は非推奨になりました。
今後、引数は1つのハッシュとして渡す必要があります。
(プルリク)
render "foo/bar"
が拡張され、render file: "foo/bar"
ではなくrender template: "foo/bar"
を実行するようになりました。
(プルリク)
フォームヘルパーが変更され、インラインCSSを持つ<div>
要素が隠しフィールドの周辺で生成されなくなりました。
(プルリク)
#{partial_name}_iteration
という特殊なローカル変数が導入されました。このローカル変数は、コレクションのレンダリング時にパーシャルを使います。これにより、#index
や#size
、#first?
やlast?
メソッドを使って現在のイテレート中の状態にアクセスできるようになりました。
(プルリク)
プレースホルダの国際化(I18n)がlabel
の国際化と同じルールに従うようになりました。
(プルリク)
変更の詳細についてはChangelogを参照してください。
Action Mailerの*_path
ヘルパーが非推奨になりました。今後は必ず*_url
ヘルパーをお使いください。
(プルリク)
deliver
とdeliver!
が非推奨になりました。今後はdeliver_now
やdeliver_now!
をお使いください。
(プルリク)
link_to
やurl_for
を使って絶対パスのURLを生成するとき、only_path: false
を渡す必要がなくなりました。
(コミット)
deliver_later
が導入されました。これは、アプリケーション内キューにジョブを流し込み、メールを非同期配信します。
(プルリク)
show_previews
設定オプションが追加されました。これはdevelopment環境の外でメーラーをプレビューできるようにするためのものです。
(プルリク)
変更の詳細については、Changelogを参照してください。
cache_attributes
およびその同類が削除されました。すべての属性は常にキャッシュされるようになりました。
(プルリク)
非推奨のActiveRecord::Base.quoted_locking_column
メソッドが削除されました。
(プルリク)
非推奨のActiveRecord::Migrator.proper_table_name
が削除されました。今後はActiveRecord::Migration
のproper_table_name
インスタンスメソッドを代わりにお使いください。
(プルリク)
未使用の:timestamp
タイプが削除されました。今後は常に透過的に:datetime
にエイリアスされるようになります。これにより、XMLシリアライズなどでカラムの種類がActive Recordの外に送信された場合の不整合が修正されます。
(プルリク)
after_commit
とafter_rollback
内でのエラーの抑制が非推奨になりました。
(プルリク)
has_many :through
関連付けにおけるカウンタキャッシュの自動検知サポートが非推奨になりました(元々壊れていました)。今後は、has_many
関連付けやbelongs_to
関連付けでレコード全体を手動でカウンタキャッシュする必要があります。
(プルリク)
.find
や.exists?
にActive Recordオブジェクトを渡すことは非推奨になりました。最初にオブジェクトのid
を呼び出すべきです。
(コミット1、2)
PostgreSQLで開始値を除外する範囲値に対する(不十分な)サポートが非推奨になりました。現在はPostgreSQLのRangeをRubyのRangeクラスにマップしています。ただし、RubyのRangeクラスでは開始値が外せないため、この方法は完全には実現できません。
現時点における、開始値を増分(increment)する解決方法は正しくないため、非推奨になりました。増分の方法が不明なサブタイプ(例: #succ
は増分方法が未定義)については、開始値を除外する範囲指定によってArgumentError
が発生します。
(コミット)
接続が行われていない状態でのDatabaseTasks.load_schema
の呼び出しが非推奨になりました。今後はDatabaseTasks.load_schema_current
をお使いください。
(コミット)
Replacementを使わずにsanitize_sql_hash_for_conditions
を使うことが非推奨になりました。クエリを発行したり更新する際にはRelation
を使うことが、推奨APIとなります。
(コミット)
:null
オプションを渡さずにadd_timestamps
やt.timestamps
を使うことが非推奨になりました。現在の初期値はnull: true
ですが、Rails 5ではnull: false
に変更される予定です。
(プルリク)
Reflection#source_macro
が非推奨になりました。今後Active Recordでの必要性がなくなったため、代替はありません。
(プルリク)
serialized_attributes
は非推奨になりました。代替はありません。
(プルリク)
カラムがない場合にcolumn_for_attribute
がnil
を返す動作が非推奨になりました。Rails 5.0ではnullオブジェクトが返されるようになる予定です。
(プルリク)
Replacementを使わずに、インスタンスの状態に依存するアソシエーション(例: 引数をとるスコープと共に定義される場合)において、.joins
や.preload
、.eager_load
を使うことが非推奨になりました。
(コミット)
create_table
が実行されるとき、SchemaDumper
がforce: :cascade
を使うようになりました。これにより、外部キーが適切であればスキーマが再読み込みできるようになります。
単独の関連付けに対する:required
オプションが追加されました。これは関連付けが存在することを確認するバリデーション(validation)を定義します。
(プルリク)
ActiveRecord::Dirty
の動作が変更され、改変可能な値(mutable value)に対する適切な変更を検出するようになりました。
何も変更がないときは、Active Recordモデル内のシリアライズされた要素は保存されなくなります。これらの変更は、PostgreSQLのstringカラムやjsonカラムでも同様に機能します。
(プルリク1, 2, 3)
現在の環境のデータベースを空にするdb:purge
というRakeタスクが導入されました。
(コミット)
レコードが正しくないときにActiveRecord::RecordInvalid
を返すActiveRecord::Base#validate!
が導入されました。
(プルリク)
valid?
のエイリアスとしてvalidate
が導入されました。
(プルリク)
touch
が複数の属性を一度に扱えるようになりました。
(プルリク)
PostgreSQLアダプターでPostgreSQL 9.4+のjsonb
データタイプがサポートされました。
(プルリク)
PostgreSQLとSQLiteアダプターで、String型の初期値から255文字制限が外れました。 (プルリク)
PostgreSQLアダプターのカラム型でcitext
がサポートされました。
(プルリク)
PostgreSQLアダプターでユーザ定義のRangeタイプがサポートされました。 (コミット)
sqlite3:///some/path
のようなパスは今後絶対システムパスで解決されるようになりました。相対パスが必要な場合は、代わりにsqlite3:some/path
のような表記をお使いください
(従来sqlite3:///some/path
はsome/path
のような相対パスで解決されていましたが、これはRails 4.1で非推奨となっていました)。
(プルリク)
モデルを整えた形式で出力するActiveRecord::Base#pretty_print
が追加されました。
(プルリク)
ActiveRecord::Base#reload
の動作がm = Model.find(m.id)
と同等になりました。これは、カスタマイズされたSELECT
に含まれていた余分な属性が今後は保持されないということを意味しています。
(プルリク)
ActiveRecord::Base#reflections
が返すハッシュのキーが、シンボルから文字列になりました。(プルリク)
マイグレーションのreferences
メソッドでtype
オプションがサポートされました。外部キーの種類(:uuid
など)を指定できます。
(プルリク)
変更の詳細についてはChangelogを参照してください。
Validator#setup
が削除されました。代替はありません。
(プルリク) reset_#{attribute}
が非推奨になりました。今後はrestore_#{attribute}
をお使いください。
(プルリク)
ActiveModel::Dirty#reset_changes
が非推奨になりました。今後はclear_changes_information
をお使いください。
(プルリク)
valid?
のエイリアスとして#validate
が導入されました。
(プルリク)
ActiveModel::Dirty
にrestore_attributes
メソッドが導入されました。これは、変更されたが保存されていない(dirty)属性を以前の値に戻すためのものです。
(プルリク1, 2)
has_secure_password
がデフォルトで空白のパスワードを許容するようになりました(例: 空白スペースのみのパスワード)。
(プルリク)
has_secure_password
で検証が有効になっている場合は、与えられたパスワードが72文字より少ないかどうかが検証されるようになりました。
(プルリク)
変更の詳細についてはChangelogを参照してください。
非推奨のNumeric#ago
、Numeric#until
、Numeric#since
、Numeric#from_now
が削除されました。
(コミット)
ActiveSupport::Callbacks
での文字列ベースの終端指定子(terminator)がこれまで非推奨になっていたのが削除されました。
(プルリク)
Kernel#silence_stderr
、Kernel#capture
、Kernel#quietly
が非推奨になりました。代替はありません。
(プルリク)
Class#superclass_delegating_accessor
が非推奨になりました。今後はClass#class_attribute
をお使いください。
(プルリク)
ActiveSupport::SafeBuffer#prepend!
が非推奨となりました。現在はActiveSupport::SafeBuffer#prepend
が同様の振る舞いをします。
(プルリク)
順序に依存するテストを明記するためのactive_support.test_order
オプションが導入されました。現在、このオプションの初期値は
:sorted
で設定されていますが、Rails 5.0から:random
に変更される予定です。
(コミット)
ブロック中で明示的にレシーバーを示さなくてもObject#try
やObject#try!
が使えるようになりました。
(コミット, プルリク)
travel_to
テストヘルパーがusec
コンポーネントをゼロに切り詰めるように変更されました。
(コミット)
ブロック中で明示的にレシーバーを示さなくてもObject#with_options
が使えるようになりました。
(プルリク)
単語数を指定して文字列を切り詰めるString#truncate_words
が導入されました。
(プルリク)
ハッシュの値を変更するときの共通のパターンを簡潔にするため、Hash#transform_values
とHash#transform_values!
が追加されました。ただし、ハッシュのキーは変更されません。
(プルリク)
アンダースコアなどを含むメソッド名などを英語らしくするhumanize
ヘルパーメソッドが、冒頭のアンダースコアを除去するようになりました。
(コミット)
Concern#class_methods
が導入されました。Kernel#concern
と同様、これはmodule ClassMethods
を置き換えるためのものであり、module Foo; extend ActiveSupport::Concern; end
のような冗長な定形コードを避けるためのものです。
(コミット)
自動読み込みやリロードに関する新しいガイドが追加されました。
Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。
Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。
原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨
本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。
Railsガイド運営チーム (@RailsGuidesJP)
Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。