1 Rails 4.2 へのアップグレード
既存のアプリケーションをアップグレードする場合、アップグレード前に十分なテストカバレッジを持っていることが重要です。また、Rails 4.1 に先にアップグレードし、アプリケーションが正常に動作することを確認してから、Rails 4.2 にアップグレードすることをお勧めします。アップグレード時に注意すべき点のリストは、ガイドの Ruby on Rails のアップグレード で入手できます。
2 主な機能
2.1 Active Job
Active Job は、Rails 4.2 の新しいフレームワークです。これは、Resque、Delayed Job、Sidekiq などのキューシステム上で共通のインターフェースを提供します。
Active Job API で書かれたジョブは、それぞれのアダプターによってサポートされるキューのいずれかで実行されます。Active Job には、ジョブを直ちに実行するインラインランナーがデフォルトで用意されています。
ジョブはしばしば Active Record オブジェクトを引数として受け取る必要があります。Active Job は、オブジェクト自体をマーシャリングするのではなく、オブジェクトへの参照を URI (uniform resource identifier) として渡します。新しい Global ID ライブラリは、URI を構築し、それらが参照するオブジェクトを検索します。Active Record オブジェクトをジョブの引数として渡すことは、Global ID を内部的に使用することでうまく動作します。
たとえば、trashable
が Active Record オブジェクトである場合、次のジョブはシリアライズなしで正常に実行されます:
class TrashableCleanupJob < ActiveJob::Base
def perform(trashable, depth)
trashable.cleanup(depth)
end
end
詳細については、Active Job Basics ガイドを参照してください。
2.2 非同期メール
Active Job をベースにして、Action Mailer には deliver_later
メソッドが追加されました。このメソッドを使用すると、メールをキューを介して送信するため、キューが非同期である場合にはコントローラーやモデルをブロックしなくなります(デフォルトのインラインキューはブロックします)。
メールを直ちに送信することも、引き続き deliver_now
で可能です。
2.3 Adequate Record
Adequate Record は、Active Record のパフォーマンス改善セットであり、一般的な find
や find_by
の呼び出し、および一部の関連クエリを最大2倍高速化します。
これは、一般的な SQL クエリをプリペアドステートメントとしてキャッシュし、類似の呼び出しで再利用することで動作します。これにより、後続の呼び出しではクエリ生成のほとんどの作業をスキップできます。詳細については、Aaron Patterson のブログ記事 を参照してください。
Active Record は、ユーザーの関与やコードの変更なしに、サポートされる操作で自動的にこの機能を利用します。以下に、サポートされる操作のいくつかの例を示します:
Post.find(1) # 最初の呼び出しはプリペアドステートメントを生成してキャッシュする
Post.find(2) # 後続の呼び出しはキャッシュされたプリペアドステートメントを再利用する
Post.find_by_title('first post')
Post.find_by_title('second post')
Post.find_by(title: 'first post')
Post.find_by(title: 'second post')
post.comments
post.comments(true)
上記の例が示すように、プリペアドステートメントはメソッド呼び出しに渡される値をキャッシュしません。代わりに、値のプレースホルダーを持っています。
次のシナリオではキャッシュは使用されません:
- モデルにはデフォルトのスコープがあります
- モデルは単一テーブル継承を使用しています
- find
にIDのリストを指定します。例えば:
```ruby
# キャッシュされていない
Post.find(1, 2, 3)
Post.find([1,2])
```
find_by
にSQLフラグメントを指定します:Post.find_by('published_at < ?', 2.weeks.ago)
2.4 Webコンソール
Rails 4.2で生成された新しいアプリケーションには、デフォルトでWeb
Console gemが含まれています。Web Consoleは、エラーページごとに対話型のRubyコンソールを追加し、console
ビューとコントローラーヘルパーを提供します。
エラーページ上の対話型コンソールでは、例外が発生した場所のコンテキストでコードを実行することができます。console
ヘルパーは、ビューまたはコントローラーのどこでも呼び出された場合、レンダリングが完了した後に最終的なコンテキストで対話型コンソールを起動します。
2.5 外部キーのサポート
マイグレーションDSLは、外部キーの追加と削除をサポートしています。これらはschema.rb
にもダンプされます。現時点では、mysql
、mysql2
、postgresql
アダプタのみが外部キーをサポートしています。
# `articles.author_id`を`authors.id`を参照する外部キーを追加
add_foreign_key :articles, :authors
# `articles.author_id`を`users.lng_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
詳細については、add_foreign_keyとremove_foreign_keyのAPIドキュメントを参照してください。
3 非互換性
以前に非推奨とされていた機能は削除されました。このリリースでの新しい非推奨事項については、個々のコンポーネントを参照してください。
以下の変更は、アップグレード時に直ちに対応が必要な場合があります。
3.1 文字列引数を使用したrender
以前は、コントローラのアクションでrender "foo/bar"
を呼び出すと、render file: "foo/bar"
と同じ意味でした。Rails 4.2では、これはrender template: "foo/bar"
を意味するように変更されました。ファイルをレンダリングする必要がある場合は、コードを明示的な形式(render file: "foo/bar"
)に変更してください。
3.2 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
3.3 rails server
のデフォルトホスト
Rackの変更により、rails server
はデフォルトで0.0.0.0
ではなくlocalhost
でリッスンするようになりました。これは、開発ワークフローにほとんど影響を与えません。自分のマシン上では、http://127.0.0.1:3000とhttp://localhost:3000の両方が以前と同様に機能します。
ただし、この変更により、開発環境が仮想マシンにあり、ホストマシンからアクセスしたい場合など、別のマシンからRailsサーバーにアクセスできなくなります。その場合は、rails server -b 0.0.0.0
でサーバーを起動して、古い動作を復元してください。
これを行う場合は、ファイアウォールを適切に設定して、信頼できるネットワーク内のマシンのみが開発サーバーにアクセスできるようにしてください。
3.4 render
のための変更されたステータスオプションシンボル
Rackの変更により、render
メソッドが受け入れる:status
オプションのシンボルが変更されました。
- 306:
:reserved
が削除されました。 - 413:
:request_entity_too_large
が:payload_too_large
に名前が変更されました。 - 414:
:request_uri_too_long
が:uri_too_long
に名前が変更されました。 - 416:
:requested_range_not_satisfiable
が:range_not_satisfiable
に名前が変更されました。
不明なシンボルでrender
を呼び出す場合、レスポンスステータスはデフォルトで500になります。
3.5 HTMLサニタイザ
HTMLサニタイザは、LoofahとNokogiriを基にした新しい、より堅牢な実装に置き換えられました。新しいサニタイザはより安全で、サニタイズはより強力で柔軟です。
新しいアルゴリズムにより、特定の病的な入力に対してサニタイズされた出力が異なる場合があります。
古いサニタイザの正確な出力が必要な場合は、Gemfile
にrails-deprecated_sanitizerジェムを追加して、古い動作を行うことができます。このジェムはオプトインであり、非推奨の警告を発行しません。
rails-deprecated_sanitizer
はRails 4.2のみサポートされ、Rails 5.0ではメンテナンスされません。
新しいサニタイザの変更の詳細については、このブログ記事を参照してください。
3.6 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
)。# content: <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
さらに、置換の構文も変更されました。
今は:match
CSSのようなセレクタを使用する必要があります。
assert_select ":match('id', ?)", 'comment_1'
また、アサーションが失敗した場合、正規表現の置換は異なる見た目になります。ここでは/hello/
:
assert_select(":match('id', ?)", /hello/)
が"(?-mix:hello)"
になります:
Expected at least 1 element matching "div:match('id', "(?-mix:hello)")", found 0..
Expected 0 to be >= 1.
assert_select
の詳細については、Rails Dom Testingのドキュメントを参照してください。
4 Railties
詳細な変更については、Changelogを参照してください。
4.1 削除
アプリケーションジェネレータから
--skip-action-view
オプションが削除されました。(Pull Request)rails application
コマンドが削除され、代替機能はありません。(Pull Request)
4.2 非推奨
本番環境の
config.log_level
の不足が非推奨となりました。(Pull Request)rake test:all
はtest
フォルダ内のすべてのテストを実行するため、rake test
に非推奨となりました。(Pull Request)rake test:all:db
をrake test:db
に置き換えるために非推奨にしました。 (プルリクエスト)Rails::Rack::LogTailer
を非推奨にしましたが、代替はありません。 (コミット)
4.3 注目すべき変更点
デフォルトのアプリケーションの
Gemfile
にweb-console
を導入しました。 (プルリクエスト)モデルジェネレータに
required
オプションを追加して、関連付けのために使用できるようにしました。 (プルリクエスト)カスタムの設定オプションを定義するための
x
名前空間を導入しました:# config/environments/production.rb config.x.payment_processing.schedule = :daily config.x.payment_processing.retries = 3 config.x.super_debugger = true
これらのオプションは設定オブジェクトを介して利用できます:
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/environments/production.rb Rails.application.configure do config.middleware.use ExceptionNotifier, config_for(:exception_notification) end
(プルリクエスト)
アプリケーションジェネレータに
--skip-turbolinks
オプションを導入して、turbolinksの統合を生成しないようにしました。 (コミット)アプリケーションをブートストラップする際の自動設定コードの慣例として
bin/setup
スクリプトを導入しました。 (プルリクエスト)config.assets.digest
のデフォルト値を開発環境でtrue
に変更しました。 (プルリクエスト)rake notes
の新しい拡張機能を登録するためのAPIを導入しました。 (プルリクエスト)Railsテンプレートで使用するための
after_bundle
コールバックを導入しました。 (プルリクエスト)Rails.gem_version
を導入し、Gem::Version.new(Rails.version)
を返す便利なメソッドとしました。 (プルリクエスト)
5 Action Pack
詳細な変更点については、Changelogを参照してください。
5.1 削除
respond_with
とクラスレベルのrespond_to
をRailsから削除し、responders
gem(バージョン2.0)に移動しました。これらの機能を引き続き使用するには、Gemfile
にgem 'responders', '~> 2.0'
を追加してください。 (プルリクエスト, 詳細はこちら)非推奨の
AbstractController::Helpers::ClassMethods::MissingHelperError
をAbstractController::Helpers::MissingHelperError
に置き換えました。 (コミット)
5.2 非推奨
*_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ヘルパーで文字列のキーを使用することを非推奨にしました:
# bad root_path('controller' => 'posts', 'action' => 'index') # good root_path(controller: 'posts', action: 'index')
(プルリクエスト)
5.3 注目すべき変更点
ドキュメントから
*_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
またはnil
のボディをレンダリングすると、レスポンスボディに単一のスペースのパディングが追加されなくなりました。 (プルリクエスト)Railsは、テンプレートのダイジェストをETagに自動的に含めるようになりました。 (プルリクエスト)
URLヘルパーに渡されるセグメントは、自動的にエスケープされるようになりました。 (コミット)
グローバルに許可されるパラメータを構成するための
always_permitted_parameters
オプションを導入しました。この設定のデフォルト値は['controller', 'action']
です。 (プルリクエスト)*_fragment.action_controller
通知には、コントローラとアクション名がペイロードに含まれるようになりました。 (プルリクエスト)ルーティングエラーページを改善し、ルート検索に対して曖昧なマッチングを追加しました。 (プルリクエスト)
CSRFの失敗のログ記録を無効化するオプションを追加しました。 (プルリクエスト)
Railsサーバーが静的アセットを提供するように設定されている場合、クライアントがサポートしており、ディスク上に事前生成されたgzipファイル(
.gz
)がある場合、gzipアセットが提供されるようになりました。デフォルトでは、アセットパイプラインは圧縮可能なすべてのアセットに対して.gz
ファイルを生成します。gzipファイルを提供することで、データ転送を最小限に抑え、アセットリクエストを高速化することができます。本番環境でRailsサーバーからアセットを提供している場合は、常にCDNを使用してください。 (プルリクエスト)統合テストで
process
ヘルパーを呼び出す場合、パスには先頭にスラッシュが必要です。以前は省略することができましたが、それは実装の副産物であり意図的な機能ではありませんでした。例:test "list all posts" do get "/posts" assert_response :success end
6 Action View
詳細な変更については、Changelogを参照してください。
6.1 廃止予定
AbstractController::Base.parent_prefixes
を廃止しました。ビューを検索する場所を変更する場合は、AbstractController::Base.local_prefixes
をオーバーライドしてください。 (プルリクエスト)ActionView::Digestor#digest(name, format, finder, options = {})
を廃止しました。引数はハッシュとして渡す必要があります。 (プルリクエスト)
6.2 注目すべき変更
render "foo/bar"
は、render template: "foo/bar"
ではなく、render file: "foo/bar"
に展開されるようになりました。 (プルリクエスト)フォームヘルパーは、非表示フィールドの周りにインラインCSSを持つ
<div>
要素を生成しなくなりました。 (プルリクエスト)コレクションでレンダリングされるパーシャルに使用するための
#{partial_name}_iteration
という特別なローカル変数を導入しました。index
、size
、first?
、last?
メソッドを介して現在のイテレーションの状態にアクセスできます。 (プルリクエスト)プレースホルダのI18nは、
label
のI18nと同じ規則に従います。 (プルリクエスト)
7 Action Mailer
詳細な変更については、Changelogを参照してください。
7.1 廃止予定
メーラー内の
*_path
ヘルパーを廃止しました。常に*_url
ヘルパーを使用してください。 (プルリクエスト)deliver
/deliver!
を廃止し、deliver_now
/deliver_now!
を使用するようにしました。 (プルリクエスト)
7.2 注目すべき変更
テンプレートで
link_to
とurl_for
はデフォルトで絶対URLを生成するようになりました。only_path: false
を渡す必要はもはやありません。 (コミット)非同期にメールを配信するために、
deliver_later
を導入し、アプリケーションのキューにジョブをエンキューするようにしました。 (プルリクエスト)メーラープレビューを開発環境以外でも有効にするための
show_previews
構成オプションを追加しました。 (プルリクエスト)
8 Active Record
詳細な変更については、Changelogを参照してください。
8.1 削除
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の範囲をRubyの範囲にマッピングしていますが、Rubyの範囲は除外開始をサポートしていないため、完全な変換は不可能です。
現在の解決策である開始の増分は正しくありませんし、廃止されました。
succ
が定義されていないサブタイプの場合、除外開始を持つ範囲に対してはArgumentError
が発生します。 (コミット)接続なしで
DatabaseTasks.load_schema
を呼び出すことは廃止されました。代わりにDatabaseTasks.load_schema_current
を使用してください。 (コミット)置換なしで
sanitize_sql_hash_for_conditions
を廃止しました。クエリと更新を実行するためにRelation
を使用することが推奨されるAPIです。 (コミット)add_timestamps
とt.timestamps
をnull
オプションを指定せずに使用することは廃止されました。Rails 5では、デフォルトのnull: true
がnull: false
に変更されます。 (プルリクエスト)Active Recordで不要な
Reflection#source_macro
を置換なしで廃止しました。 (プルリクエスト)置換なしで
serialized_attributes
を廃止しました。 (プルリクエスト)カラムが存在しない場合に
column_for_attribute
からnil
を返すことは廃止されました。Rails 5.0では、代わりにヌルオブジェクトが返されます。 (プルリクエスト)置換なしで、インスタンスの状態に依存する関連(引数を受け取るスコープで定義されたもの)を使用して
.joins
、.preload
、.eager_load
を使用することは廃止されました。 (コミット)
8.2 注目すべき変更点
SchemaDumper
はcreate_table
にforce: :cascade
を使用します。これにより、外部キーが存在する場合にスキーマを再読み込みすることが可能になります。単数形の関連に
required
オプションを追加しました。これにより、関連に対して存在検証が定義されます。 (プルリクエスト)ActiveRecord::Dirty
は、可変値へのインプレース変更を検出するようになりました。Active Recordモデルのシリアライズされた属性は、変更がない場合に保存されなくなりました。これは、PostgreSQL上の文字列カラムやJSONカラムなどの他のタイプでも機能します。 (プルリクエスト 1, 2, 3)現在の環境のデータベースを空にするための
db:purge
Rakeタスクを導入しました。 (コミット)ActiveRecord::Base#validate!
を導入しました。これにより、レコードが無効な場合にActiveRecord::RecordInvalid
が発生します。 (プルリクエスト)validate
をvalid?
のエイリアスとして導入しました。 (プルリクエスト)touch
は複数の属性を一度にタッチすることができるようになりました。 (プルリクエスト)PostgreSQLアダプタは、PostgreSQL 9.4+で
jsonb
データ型をサポートするようになりました。 (プルリクエスト)PostgreSQLおよびSQLiteアダプタは、文字列カラムのデフォルトの制限を255文字から削除しました。 (プルリクエスト)
PostgreSQLアダプタで
citext
カラムタイプをサポートするようになりました。 (プルリクエスト)PostgreSQLアダプタでユーザーが作成した範囲型をサポートするようになりました。 (コミット)
sqlite3:///some/path
は絶対システムパス/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
)。 (プルリクエスト)
9 Active Model
詳細な変更については、Changelogを参照してください。
9.1 削除
- 代替なしで非推奨の
Validator#setup
を削除しました。 (プルリクエスト)
9.2 非推奨
reset_#{attribute}
をrestore_#{attribute}
に非推奨としました。 (プルリクエスト)ActiveModel::Dirty#reset_changes
をclear_changes_information
に非推奨としました。 (プルリクエスト)
9.3 注目すべき変更
valid?
の別名としてvalidate
を導入しました。 (プルリクエスト)ActiveModel::Dirty
のrestore_attributes
メソッドを導入し、変更(dirty)された属性を以前の値に戻します。 (プルリクエスト 1, 2)has_secure_password
は、デフォルトで空のパスワード(スペースのみを含むパスワード)を許可するようになりました。 (プルリクエスト)has_secure_password
は、バリデーションが有効な場合、与えられたパスワードが72文字未満であることを検証するようになりました。 (プルリクエスト)
10 Active Support
詳細な変更については、Changelogを参照してください。
10.1 削除
非推奨の
Numeric#ago
、Numeric#until
、Numeric#since
、Numeric#from_now
を削除しました。 (コミット)ActiveSupport::Callbacks
の非推奨の文字列ベースの終端子を削除しました。 (プルリクエスト)
10.2 非推奨
代替なしで非推奨の
Kernel#silence_stderr
、Kernel#capture
、Kernel#quietly
を削除しました。 (プルリクエスト)Class#superclass_delegating_accessor
を非推奨とし、Class#class_attribute
を使用するようにしました。 (プルリクエスト)ActiveSupport::SafeBuffer#prepend!
を非推奨とし、ActiveSupport::SafeBuffer#prepend
が同じ機能を実行するようにしました。 (プルリクエスト)
10.3 注目すべき変更
テストケースの実行順序を指定するための新しい設定オプション
active_support.test_order
を導入しました。このオプションは現在はデフォルトでsorted
になっていますが、Rails 5.0ではrandom
に変更されます。 (コミット)Object#try
とObject#try!
は、ブロック内で明示的なレシーバーなしで使用することができるようになりました。 (コミット, プルリクエスト)travel_to
テストヘルパーは、usec
コンポーネントを0に切り捨てるようになりました。 (コミット)Object#with_options
は、ブロック内で明示的なレシーバーなしで使用することができるようになりました。 (プルリクエスト)文字列の単語数で文字列を切り詰めるための
String#truncate_words
を導入しました。 (プルリクエスト)Hash#transform_values
とHash#transform_values!
を追加し、ハッシュの値を変更する一般的なパターンを簡素化しましたが、キーは変更しません。 (プルリクエスト)humanize
インフレクターヘルパーは、先頭のアンダースコアを削除するようになりました。 (コミット)Concern#class_methods
をmodule ClassMethods
の代替として導入し、module Foo; extend ActiveSupport::Concern; end
の冗長なコードを避けるためのKernel#concern
を導入しました。 (コミット)定数の自動ロードと再読み込みに関する新しいガイドを追加しました。
11 クレジット
Railsへの多くの時間を費やした多くの人々に感謝します。Railsを安定かつ堅牢なフレームワークにしてくれたすべての人々に感謝します。
フィードバック
このガイドの品質向上にご協力ください。
タイポや事実の誤りを見つけた場合は、ぜひ貢献してください。 開始するには、ドキュメントへの貢献セクションを読んでください。
不完全なコンテンツや最新でない情報も見つかるかもしれません。 メインのドキュメントに不足しているドキュメントを追加してください。 修正済みかどうかは、まずEdge Guidesを確認してください。 スタイルと規約については、Ruby on Rails Guides Guidelinesを確認してください。
修正すべき点を見つけたが、自分で修正できない場合は、 問題を報告してください。
そして最後に、Ruby on Railsのドキュメントに関するあらゆる議論は、公式のRuby on Railsフォーラムで大歓迎です。