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

Ruby on Rails 3.1 リリースノート

Rails 3.1 のハイライト:

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

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

既存のアプリケーションをアップグレードする場合、アップグレードする前に十分なテストカバレッジを持つことが重要です。また、Rails 3 にアップグレードしていない場合は、まずそれを行い、アプリケーションが正常に動作することを確認してから、Rails 3.1 に更新しようとしてください。次に、以下の変更に注意してください:

1.1 Rails 3.1 では少なくとも Ruby 1.8.7 が必要です

Rails 3.1 では Ruby 1.8.7 以上が必要です。以前の Ruby バージョンのサポートは公式に終了しており、できるだけ早くアップグレードする必要があります。Rails 3.1 は Ruby 1.9.2 とも互換性があります。

Ruby 1.8.7 p248 と p249 には、Rails をクラッシュさせるマーシャリングのバグがあります。ただし、Ruby Enterprise Edition では 1.8.7-2010.02 リリース以降、これらのバグが修正されています。1.9 系では、1.9.1 はまったく使用できず、セグフォルトが発生するため、スムーズな動作をするためには 1.9.2 に移行する必要があります。

1.2 アプリケーションの更新内容

以下の変更は、Rails 3.1.3、最新の 3.1.x バージョンにアプリケーションをアップグレードするためのものです。

1.2.1 Gemfile

Gemfile に以下の変更を加えてください。

gem 'rails', '= 3.1.3'
gem 'mysql2'

# 新しいアセットパイプラインに必要
group :assets do
  gem 'sass-rails',   "~> 3.1.5"
  gem 'coffee-rails', "~> 3.1.1"
  gem 'uglifier',     ">= 1.0.3"
end

# Rails 3.1 ではデフォルトの JavaScript ライブラリとして jQuery を使用します
gem 'jquery-rails'

1.2.2 config/application.rb

  • アセットパイプラインには以下の追加が必要です:

    config.assets.enabled = true
    config.assets.version = '1.0'
    
  • アプリケーションがリソースのために "/assets" ルートを使用している場合、アセットのプレフィックスを変更して競合を避ける必要があります:

    # デフォルトは '/assets'
    config.assets.prefix = '/asset-files'
    

1.2.3 config/environments/development.rb

  • RJS 設定 config.action_view.debug_rjs = true を削除してください。

  • アセットパイプラインを有効にしている場合、以下を追加してください。

    # アセットを圧縮しない
    config.assets.compress = false
    
    # アセットを読み込む行を展開する
    config.assets.debug = true
    

1.2.4 config/environments/production.rb

  • 再び、以下の変更はほとんどがアセットパイプラインに関するものです。これらについては、アセットパイプラインガイドで詳細を読むことができます。

    # JavaScript と CSS を圧縮する
    config.assets.compress = true
    
    # プリコンパイルされたアセットが見つからない場合、アセットパイプラインにフォールバックしない
    config.assets.compile = false
    
    # アセットの URL にダイジェストを生成する
    config.assets.digest = true
    
    # Rails.root.join("public/assets") がデフォルトです
    # config.assets.manifest = YOUR_PATH
    
    # 追加のアセットをプリコンパイルする (application.js、application.css、およびすべての非 JS/CSS は既に追加されています)
    # config.assets.precompile `= %w( admin.js admin.css )
    
    # アプリケーションへのすべてのアクセスを SSL で行い、Strict-Transport-Security を使用し、セキュアなクッキーを使用します。
    # config.force_ssl = true
    

1.2.5 config/environments/test.rb

# パフォーマンスのために Cache-Control を使用してテスト用の静的アセットサーバーを設定する
config.serve_static_assets = true
config.static_cache_control = "public, max-age=3600"

1.2.6 config/initializers/wrap_parameters.rb

  • パラメータをネストしたハッシュにラップする場合は、以下の内容でこのファイルを追加してください。これは新しいアプリケーションではデフォルトで有効になっています。

    # このファイルを変更した場合は、サーバーを再起動してください。
    # このファイルにはデフォルトで有効になっている ActionController::ParamsWrapper の設定が含まれています。
    
    # JSON のパラメータラッピングを有効にします。:format を空の配列に設定することで、これを無効にすることもできます。
    ActiveSupport.on_load(:action_controller) do
      wrap_parameters :format => [:json]
    end
    
    # JSON でのルート要素をデフォルトで無効にします。
    ActiveSupport.on_load(:active_record) do
      self.include_root_in_json = false
    end
    

1.2.7 ビュー内のアセットヘルパーの参照で :cache と :concat オプションを削除する

  • アセットパイプラインでは、:cache と :concat オプションは使用されなくなりましたので、ビューからこれらのオプションを削除してください。

2 Rails 3.1 アプリケーションの作成

# 'rails' RubyGem がインストールされている必要があります
$ rails new myapp
$ cd myapp

2.1 ジェムのベンダリング

Rails は現在、アプリケーションのルートにある Gemfile を使用して、アプリケーションの起動に必要なジェムを決定します。この GemfileBundler ジェムによって処理され、依存関係のあるすべてのジェムがインストールされます。さらに、これらの依存関係をアプリケーションにローカルにインストールすることもできます。 詳細情報:- bundlerホームページ

2.2 最新の情報

BundlerGemfileは、新しい専用のbundleコマンドを使用して、Railsアプリケーションを簡単に凍結することができます。Gitリポジトリから直接バンドルする場合は、--edgeフラグを渡すことができます。

$ rails new myapp --edge

Railsリポジトリのローカルチェックアウトがあり、それを使用してアプリケーションを生成したい場合は、--devフラグを渡すことができます。

$ ruby /path/to/rails/railties/bin/rails new myapp --dev

3 Railsのアーキテクチャの変更

3.1 アセットパイプライン

Rails 3.1の主な変更点は、アセットパイプラインです。これにより、CSSとJavaScriptが一流のコードとして扱われ、プラグインやエンジンでの使用を含む適切な組織化が可能になります。

アセットパイプラインはSprocketsによって動作し、アセットパイプラインガイドで説明されています。

3.2 HTTPストリーミング

HTTPストリーミングは、Rails 3.1で新しく追加された変更です。これにより、サーバーがレスポンスを生成している間に、ブラウザがスタイルシートやJavaScriptファイルをダウンロードすることができます。これにはRuby 1.9.2が必要であり、オプトインであり、Webサーバーからのサポートも必要ですが、NGINXとUnicornの人気の組み合わせはこれを活用する準備ができています。

3.3 デフォルトのJSライブラリはjQueryになりました

Rails 3.1には、デフォルトのJavaScriptライブラリとしてjQueryが付属しています。ただし、Prototypeを使用する場合は、簡単に切り替えることができます。

$ rails new myapp -j prototype

3.4 Identity Map

Rails 3.1では、Active RecordにIdentity Mapが追加されています。Identity Mapは、以前にインスタンス化されたレコードを保持し、再度アクセスされた場合に関連付けられたオブジェクトを返します。Identity Mapはリクエストごとに作成され、リクエストの完了時にフラッシュされます。

Rails 3.1では、Identity Mapはデフォルトで無効になっています。

4 Railties

  • jQueryは新しいデフォルトのJavaScriptライブラリです。

  • jQueryとPrototypeはもはやベンダーになっておらず、jquery-railsprototype-railsのgemから提供されます。

  • アプリケーションジェネレータは、任意の文字列であるオプション-jを受け入れます。 "foo"が渡されると、"foo-rails"のgemがGemfileに追加され、アプリケーションのJavaScriptマニフェストが "foo"と "foo_ujs"を要求します。現在、"prototype-rails"と"jquery-rails"のみが存在し、これらのファイルをアセットパイプラインを介して提供します。

  • アプリケーションまたはプラグインの生成は、--skip-gemfileまたは--skip-bundleが指定されていない限り、bundle installを実行します。

  • コントローラーおよびリソースのジェネレータは、自動的にアセットのスタブを生成します(--skip-assetsで無効にすることもできます)。これらのスタブは、CoffeeScriptとSassを使用します(これらのライブラリが利用可能な場合)。

  • スキャフォールドおよびアプリケーションのジェネレータは、Ruby 1.9で実行される場合にはRuby 1.9スタイルのハッシュを生成します。古いスタイルのハッシュを生成するには、--old-style-hashを渡すことができます。

  • スキャフォールドコントローラージェネレータは、XMLの代わりにJSON用のフォーマットブロックを作成します。

  • Active RecordのログはSTDOUTにリダイレクトされ、コンソールにインラインで表示されます。

  • config.force_ssl設定が追加されました。これにより、Rack::SSLミドルウェアが読み込まれ、すべてのリクエストがHTTPSプロトコルの下にあるように強制されます。

  • rails plugin newコマンドが追加されました。これにより、gemspec、テスト、テスト用のダミーアプリケーションを含むRailsプラグインが生成されます。

  • デフォルトのミドルウェアスタックにRack::EtagRack::ConditionalGetが追加されました。

  • デフォルトのミドルウェアスタックにRack::Cacheが追加されました。

  • エンジンは大幅に更新されました-任意のパスにマウントでき、アセットを有効にしたり、ジェネレータを実行したりすることができます。

5 Action Pack

5.1 Action Controller

  • CSRFトークンの正当性が検証できない場合、警告が表示されます。

  • 特定のコントローラーでデータの転送をHTTPSプロトコルを使用するようにブラウザに強制するには、コントローラーでforce_sslを指定します。特定のアクションに制限するには、:onlyまたは:exceptを使用できます。

  • config.filter_parametersで指定された機密クエリ文字列パラメータは、ログのリクエストパスからフィルタリングされるようになりました。

  • to_paramnilを返すURLパラメータは、クエリ文字列から削除されるようになりました。

  • ActionController::ParamsWrapperが追加され、パラメータをネストしたハッシュにラップします。新しいアプリケーションのJSONリクエストではデフォルトで有効になります。これはconfig/initializers/wrap_parameters.rbでカスタマイズできます。

  • config.action_controller.include_all_helpersが追加されました。デフォルトでは、ActionController::Basehelper :allが実行され、デフォルトですべてのヘルパーが含まれます。include_all_helpersfalseに設定すると、application_helperとコントローラーに対応するヘルパー(foo_controllerの場合はfoo_helper)のみが含まれるようになります。

  • url_forと名前付きURLヘルパーは、オプションとしてsubdomaindomainを受け入れるようになりました。

  • Base.http_basic_authenticate_withを追加し、単一のクラスメソッド呼び出しで簡単なHTTPベーシック認証を行うようにしました。

    class PostsController < ApplicationController
      USER_NAME, PASSWORD = "dhh", "secret"
    
      before_filter :authenticate, :except => [ :index ]
    
      def index
        render :text => "Everyone can see me!"
      end
    
      def edit
        render :text => "I'm only accessible if you know the password"
      end
    
      private
        def authenticate
          authenticate_or_request_with_http_basic do |user_name, password|
            user_name == USER_NAME && password == PASSWORD
          end
        end
    end
    

    ..は以下のように書くことができます

    class PostsController < ApplicationController
      http_basic_authenticate_with :name => "dhh", :password => "secret", :except => :index
    
      def index
        render :text => "Everyone can see me!"
      end
    
      def edit
        render :text => "I'm only accessible if you know the password"
      end
    end
    
  • ストリーミングサポートを追加し、次のように有効にすることができます:

    class PostsController < ActionController::Base
      stream
    end
    

    :onlyまたは:exceptを使用して一部のアクションに制限することもできます。詳細についてはActionController::Streamingのドキュメントを参照してください。

  • リダイレクトルートメソッドは、URLの特定の部分のみを変更するオプションのハッシュまたは呼び出し可能なオブジェクトも受け入れるようになりました。

5.2 Action Dispatch

  • config.action_dispatch.x_sendfile_headerはデフォルトでnilになり、config/environments/production.rbでは特定の値を設定しません。これにより、サーバーがX-Sendfile-Typeを通じて設定できるようになります。

  • ActionDispatch::MiddlewareStackは継承ではなくコンポジションを使用するようになり、もはや配列ではありません。

  • ActionDispatch::Request.ignore_accept_headerを追加して、acceptヘッダーを無視するようにしました。

  • デフォルトのスタックにRack::Cacheを追加しました。

  • etagの責任をActionDispatch::Responseからミドルウェアスタックに移動しました。

  • より互換性のあるために、Rack::SessionストアAPIに依存するようにしました。これは、Rack::Session#get_sessionを4つの引数で受け入れ、単純に#destroyではなく#destroy_sessionを要求するため、後方互換性がありません。

  • テンプレートの検索は、継承チェーンの上方にも検索するようになりました。

5.3 Action View

  • form_tagauthenticity_tokenオプションを追加し、カスタム処理またはトークンを省略するためにauthenticity_token => falseを渡すことができるようにしました。

  • ActionView::Rendererを作成し、ActionView::ContextのAPIを指定しました。

  • Rails 3.1では、SafeBufferの変更が禁止されています。

  • HTML5のbutton_tagヘルパーを追加しました。

  • file_fieldは自動的に囲むフォームにmultipart => trueを追加します。

  • :dataハッシュのオプションからHTML5のdata-*属性を生成するための便利なイディオムを追加しました:

    tag("div", :data => {:name => 'Stephen', :city_state => %w(Chicago IL)})
    # => <div data-name="Stephen" data-city-state="[&quot;Chicago&quot;,&quot;IL&quot;]" />
    

キーはダッシュ区切りになります。値は文字列とシンボル以外はJSONエンコードされます。

  • csrf_meta_tagcsrf_meta_tagsに名前が変更され、後方互換性のためにcsrf_meta_tagのエイリアスも追加されました。

  • 古いテンプレートハンドラAPIは非推奨となり、新しいAPIではテンプレートハンドラがcallに応答することを要求します。

  • rhtmlとrxmlはついにテンプレートハンドラから削除されました。

  • config.action_view.cache_template_loadingが復活し、テンプレートをキャッシュするかどうかを決定することができるようになりました。

  • submitフォームヘルパーはもはやid "object_name_id"を生成しません。

  • FormHelper#form_for:methodを直接オプションとして指定できるようになりました。form_for(@post, remote: true, method: :delete)のようにform_for(@post, remote: true, html: { method: :delete })ではなくなりました。

  • JavaScriptHelper#j()JavaScriptHelper#escape_javascript()のエイリアスとして提供しました。これにより、JavaScriptHelperを使用してテンプレート内でJSONジェムが追加するObject#j()メソッドを上書きします。

  • datetimeセレクタでAM/PM形式を許可しました。

  • auto_linkはRailsから削除され、rails_autolink gemに抽出されました。

6 Active Record

  • 個々のモデルのテーブル名を単数形/複数形にするためのクラスメソッドpluralize_table_namesを追加しました。以前はActiveRecord::Base.pluralize_table_namesを介してすべてのモデルに対してグローバルに設定することしかできませんでした。

    class User < ActiveRecord::Base
      self.pluralize_table_names = false
    end
    
  • 単数の関連付けに対して属性の設定をブロックで行うことができるようになりました。ブロックはインスタンスが初期化された後に呼び出されます。

    class User < ActiveRecord::Base
      has_one :account
    end
    
    user.build_account{ |a| a.credit_limit = 100.0 }
    
  • ActiveRecord::Base.attribute_namesを追加し、属性名のリストを返すようにしました。モデルが抽象的であるか、テーブルが存在しない場合は空の配列が返されます。

  • CSVフィクスチャは非推奨となり、Rails 3.2.0でサポートが削除されます。

  • ActiveRecord#newActiveRecord#createActiveRecord#update_attributesは、属性を割り当てる際にどのロールを考慮するかを指定するためのオプションとして2番目のハッシュを受け入れるようになりました。これはActive Modelの新しい一括割り当て機能を基にしています。 ```ruby class Post < ActiveRecord::Base attr_accessible :title attr_accessible :title, :published_at, :as => :admin end

Post.new(params[:post], :as => :admin) ```

  • default_scopeはブロック、ラムダ、または他のcallに応答するオブジェクトを受け入れるようになりました。

  • デフォルトスコープは、Model.unscopedを介して取り除くことができなくなる問題を避けるために、最も遅い時点で評価されるようになりました。

  • PostgreSQLアダプタは、PostgreSQLバージョン8.2以上のみをサポートしています。

  • ConnectionManagementミドルウェアは、rackのボディがフラッシュされた後に接続プールをクリーンアップするように変更されました。

  • Active Recordにupdate_columnメソッドが追加されました。この新しいメソッドは、バリデーションとコールバックをスキップしてオブジェクトの指定された属性を更新します。updated_atカラムの変更を含むすべてのコールバックを実行したくない場合を除き、update_attributesまたはupdate_attributeを使用することをお勧めします。新しいレコードでは呼び出すべきではありません。

  • :throughオプションを持つ関連は、他のhas_and_belongs_to_many関連や:throughオプションを持つ他の関連を含む、任意の関連を使用できるようになりました。

  • 現在のデータベース接続の設定は、ActiveRecord::Base.connection_configを介してアクセスできるようになりました。

  • COUNTクエリからlimitsとoffsetが削除されました。

People.limit(1).count           # => 'SELECT COUNT(*) FROM people'
People.offset(1).count          # => 'SELECT COUNT(*) FROM people'
People.limit(1).offset(1).count # => 'SELECT COUNT(*) FROM people LIMIT 1 OFFSET 1'
  • ActiveRecord::Associations::AssociationProxyが分割されました。関連操作を担当するAssociationクラス(およびサブクラス)と、コレクション関連をプロキシする独立した薄いラッパーであるCollectionProxyが別々になりました。これにより、名前空間の汚染を防ぎ、関心を分離し、さらなるリファクタリングを可能にします。

  • 単数の関連(has_onebelongs_to)にはもはやプロキシがなく、関連するレコードまたはnilを単純に返します。これは、bob.mother.createなどの未公開のメソッドを使用しないでください。代わりにbob.create_motherを使用してください。

  • has_many :through関連にdependentオプションをサポートしました。歴史的および実用的な理由から、association.delete(*records)によるデフォルトの削除戦略は、通常のhas_manyの場合にはnullifyですが、delete_allです。また、これはソースリフレクションがbelongs_toである場合にのみ機能します。他の状況では、直接through関連を変更する必要があります。

  • has_and_belongs_to_manyおよびhas_many :throughassociation.destroyの動作が変更されました。以前は、関連するレコード自体を破棄していましたが、結合テーブルのレコードは削除しませんでした。今では、結合テーブルのレコードを削除します。

  • 以前は、has_and_belongs_to_many.destroy(*records)はレコード自体を破棄していましたが、結合テーブルのレコードは削除しませんでした。今では、結合テーブルのレコードを削除します。

  • 以前は、has_many_through.destroy(*records)はレコード自体と結合テーブルのレコードを破棄していました。[注:これは常にそうではありませんでした。以前のバージョンのRailsでは、レコード自体のみを削除しました。]今では、結合テーブルのレコードのみを削除します。

  • この変更はある程度後方互換性がありますが、変更する前に「非推奨」にする方法は残念ながらありません。この変更は、異なるタイプの関連に対する「destroy」または「delete」の意味の一貫性を持つために行われています。レコード自体を破棄したい場合は、records.association.each(&:destroy)を使用できます。

  • change_table:bulk => trueオプションを追加して、単一のALTERステートメントを使用してブロックで定義されたすべてのスキーマ変更を行います。

change_table(:users, :bulk => true) do |t|
  t.string :company_name
  t.change :birthdate, :datetime
end
  • has_and_belongs_to_many結合テーブルの属性へのアクセスのサポートが削除されました。has_many :throughを使用する必要があります。

  • has_oneおよびbelongs_to関連のためのcreate_association!メソッドが追加されました。

  • マイグレーションは今や逆転可能であり、Railsはマイグレーションを逆転する方法を自動的に見つけ出します。逆転可能なマイグレーションを使用するには、単にchangeメソッドを定義します。

class MyMigration < ActiveRecord::Migration
  def change
    create_table(:horses) do |t|
      t.column :content, :text
      t.column :remind_at, :datetime
    end
  end
end
  • いくつかのことは自動的に逆転できません。それらを逆転する方法を知っている場合は、マイグレーションでupdownを定義する必要があります。逆転できないものをchangeで定義すると、下に移動する際にIrreversibleMigration例外が発生します。

  • マイグレーションは、クラスメソッドではなくインスタンスメソッドを使用するようになりました: ```ruby class FooMigration < ActiveRecord::Migration def up # Not self.up

    ...

    end end ```

  • モデルと構築的なマイグレーションジェネレータから生成されたマイグレーションファイル(例:add_name_to_users)は、通常のupdownメソッドの代わりに、可逆マイグレーションのchangeメソッドを使用します。

  • 関連付けの文字列SQL条件の補間サポートが削除されました。代わりに、procを使用する必要があります。

has_many :things, :conditions => 'foo = #{bar}'          # 以前
has_many :things, :conditions => proc { "foo = #{bar}" } # 以降

proc内では、selfは関連付けの所有者であるオブジェクトです。ただし、関連付けをイーガーロードしている場合は、selfは関連付けが含まれるクラスです。

proc内には、通常の条件を含めることができるため、次のようにも機能します。

has_many :things, :conditions => proc { ["foo = ?", bar] }
  • 以前のhas_and_belongs_to_many関連付けの:insert_sql:delete_sqlでは、挿入または削除されるレコードを取得するために'record'を呼び出すことができました。これは、現在はprocの引数として渡されます。

  • ActiveRecord::Base#has_secure_passwordActiveModel::SecurePasswordを介して)が追加され、BCrypt暗号化とソルトを使用したシンプルなパスワードの使用をカプセル化します。

# スキーマ: User(name:string, password_digest:string, password_salt:string)
class User < ActiveRecord::Base
  has_secure_password
end
  • モデルが生成されると、belongs_toまたはreferencesのカラムに対してデフォルトでadd_indexが追加されます。

  • belongs_toオブジェクトのidを設定すると、オブジェクトへの参照が更新されます。

  • ActiveRecord::Base#dupActiveRecord::Base#cloneのセマンティクスが通常のRubyのdupとcloneのセマンティクスに近づきました。

  • ActiveRecord::Base#cloneを呼び出すと、レコードの浅いコピーが作成され、凍結状態もコピーされます。コールバックは呼び出されません。

  • ActiveRecord::Base#dupを呼び出すと、レコードが複製され、after initializeフックが呼び出されます。凍結状態はコピーされず、すべての関連付けがクリアされます。複製されたレコードはnew_record?に対してtrueを返し、nilのidフィールドを持ち、保存可能です。

  • クエリキャッシュはプリペアドステートメントと連携します。アプリケーションに変更は必要ありません。

7 Active Model

  • attr_accessibleは、ロールを指定するオプション:asを受け入れます。

  • InclusionValidatorExclusionValidator、およびFormatValidatorは、proc、lambda、またはcallに応答するオブジェクトをオプションとして受け入れるようになりました。このオプションは、現在のレコードを引数として受け取り、InclusionValidatorの場合はinclude?に応答するオブジェクト、ExclusionValidatorの場合はinclude?に応答するオブジェクト、FormatValidatorの場合は正規表現オブジェクトを返します。

  • BCrypt暗号化とソルトを使用したシンプルなパスワードの使用をカプセル化するために、ActiveModel::SecurePasswordが追加されました。

  • ActiveModel::AttributeMethodsは、要求に応じて属性を定義できるようにします。

  • オブザーバーの有効化と無効化を選択的にサポートするためのサポートが追加されました。

  • 代替のI18n名前空間の検索はサポートされなくなりました。

8 Active Resource

  • すべてのリクエストのデフォルトフォーマットがJSONに変更されました。XMLを引き続き使用する場合は、クラスでself.format = :xmlを設定する必要があります。例:
class User < ActiveResource::Base
  self.format = :xml
end

9 Active Support

  • ActiveSupport::Dependenciesは、load_missing_constantで既存の定数が見つかった場合にNameErrorを発生させるようになりました。

  • STDOUTSTDERRの両方を無音にするための新しいレポートメソッドKernel#quietlyが追加されました。

  • String#inquiryは、StringをStringInquirerオブジェクトに変換するための便利なメソッドとして追加されました。

  • オブジェクトが別のオブジェクトに含まれているかどうかをテストするためのObject#in?が追加されました。

  • LocalCacheストラテジーは、匿名クラスではなく、本当のミドルウェアクラスとして実装されました。

  • ActiveSupport::Dependencies::ClassCacheクラスが導入され、リロード可能なクラスへの参照を保持するために使用されます。

  • ActiveSupport::Dependencies::Referenceは、新しいClassCacheを直接利用するようにリファクタリングされました。

  • Ruby 1.8でRange#include?のエイリアスとしてRange#cover?をバックポートしました。

  • Date/DateTime/Timeにweeks_agoprev_weekが追加されました。

  • ActiveSupport::Dependencies.remove_unloadable_constants!before_remove_constコールバックが追加されました。

非推奨:

  • ActiveSupport::SecureRandomは、Ruby標準ライブラリのSecureRandomに代わって非推奨です。

10 クレジット

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

Rails 3.1リリースノートはVijay Devによってまとめられました。

フィードバック

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

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

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

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

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