Rails 3.0 へようこそ

2008 年 12 月 23 日の時点で、Merb (Mongrel + Erb) プロジェクトは Rails と統合されており、両方の優れた機能を備えたバージョンが 2010 年に次の名前でリリースされる予定です。 レール 3. Rails 3.0の主な追加点 – RESTful 宣言に重点を置いた新しいルーター – アクション コントローラーをモデルにした新しいアクション メーラー API – リレーショナル代数の上に構築された新しいアクティブ レコード チェーン可能なクエリ言語 – プロトタイプおよび jQuery 用ドライバーを備えた控えめな Javascript ヘルパー

Rails 3.0 では、Rails のほぼすべてのプロパティがアップグレードされました。以下に、すべてのプロパティとそのアップグレードおよび以前のリリースへの追加をリストします。 基本的な変更には次のものが含まれます。 レール 3.0 Ruby 1.8.7以降のみをサポートします アプリケーションオブジェクト 複数の Rails アプリケーションを同じプロセスで実行するために、Application オブジェクトと呼ばれる新しい概念が導入されました。アプリケーション オブジェクトはアプリケーション固有の設定をすべて保持し、Rails の以前のバージョンの config/environment.rb と本質的によく似ています。

- 脚本/* 新しいスクリプト/レールは、スクリプト ディレクトリにあったすべてのスクリプトを置き換えます。 例: script/console の代わりに、スクリプト/generate scaffold post title:string Rails g scaffold post title:string の代わりに console Gemfile とバンドラー Rails は、アプリケーションのルートで Gemfile を使用して、アプリケーションの起動に必要な gem を決定するようになりました。この Gemfile は Bundler によって処理され、すべての依存関係がインストールされます。 Bundler は、Ruby アプリケーションの gem 依存関係を管理するツールです。マニフェスト ファイルで指定されている gem とすべての子の依存関係を取得、ダウンロード、インストールできます。 「gem install Bundler」コマンドは、この gem をインストールします。 – すべての Rails コアコンポーネントが分離されました。 Rails コア コンポーネントは、プラグインの開発に使用できる API と同じ API を使用するようになりました。これは、作成したプラグインはすべて、Rails コア コンポーネントがアクセスできるすべての機能にアクセスできることを意味します。 ORM プラグインは、Action Pack とシームレスに連携するために Active Model インターフェイスを実装するだけで済みます。 アレル Arel は、関係代数のオブジェクト指向解釈です。これは、Active Record を簡素化する SQL 抽象化を提供し、Active Record のリレーション機能の基盤を提供します。 Arel について詳しくは、記事の「アクティブ レコード」の部分で説明します。 国際化 – さまざまな地域言語でのプログラミングをサポートするために使用される、I18n gem と呼ばれる国際化 gem が導入されました。 発電機 – Rails 3.0ではジェネレーターが大きな注目を集めました。行われた多くの変更と追加の一部は次のとおりです。 ジェネレーターは完全に書き直され、下位互換性がありません。 Rails テンプレート API とジェネレーター API が統合されました。ジェネレーターは特別なパスからロードされなくなり、Ruby ロード パス内でのみ見つかるようになりました。そのため、rails generated foo を呼び出すと、generators/foo_generator が検索されます。新しいジェネレーターはフックを提供するため、任意のテンプレート エンジン、ORM、テスト フレームワークを簡単にフックできます。新しいジェネレーターを使用すると、コピーを RAILS_ROOT/lib/templates に配置することでテンプレートをオーバーライドできます。 Rails::Generators::TestCase も提供されているため、独自のジェネレーターを作成してテストできます。 アクションコントローラー ActionController と ActionMailer は、これらすべてのライブラリから共通コードが削除され、AbstractController に組み込まれることで大幅に簡素化されました。 Abstract Controller は、Action Controller の汎用部分を再利用可能なモジュールに引き出します。このモジュールを任意のライブラリで使用して、テンプレートのレンダリング、パーシャルのレンダリング、ヘルパー、翻訳、ロギングなど、リクエスト応答サイクルのあらゆる部分を実行できます。 application_controller.rb では、デフォルトで protected_from_forgery がオンになりました。 cookie_verifier_secret は、initializers/cookie_verification_secret.rb に移動されました。 session_store 構成は、initializers/session_store.rb に移動されました。 cookies.secure を使用すると、cookie.secure[:key] => value を使用して Cookie に暗号化された値を設定できます。 cookies.permanent を使用すると、Cookie ハッシュ cookie.permanent[:key] => 値に永続的な値を設定できるようになり、検証が失敗した場合に署名された値に対して例外が発生します。 :notice => 'これはフラッシュ メッセージです' または :alert => '問題が発生しました' を、response_to ブロック内の形式呼び出しに渡すことができるようになりました。 flash[] ハッシュは以前と同様に機能します。 Reply_with メソッドがコントローラーに追加され、由緒あるフォーマット ブロックが簡素化されました。 ActionController::Responder が追加され、応答の生成方法を柔軟に行えるようになりました。 アクションメーラー AbstractController の作成により、ActionMailer::Base は AbstractController から継承し、Rails DSL を Mail gem にラップするだけになりました。これにより、Action Mailer のコードの量と他のライブラリの重複が大幅に削減されます。 – すべての電子メール メッセージ関連の機能は、Mail gem に抽象化されています。これにより、コードの重複が減り、Action Mailer と電子メール パーサーの間に定義可能な境界を作成するのに役立ちます。 – メーラーの単体テストは機能テストに移動されました。 – 新しい API を使用して、添付ファイル、ヘッダー、メールの 3 つの方法で電子メールを送信できるようになりました。 アクションビュー Unobtrusive JavaScript (UJS) が実装され、古いインライン AJAX コマンドが削除されました。これにより、Rails は準拠した UJS ドライバーを使用してヘルパーに UJS フックを実装できるようになります。これは、以前のすべてのremote_ヘルパーがRailsコアから削除され、プロトタイプのレガシーヘルパーに組み込まれたことを意味します。 UJS フックを HTML に取り込むには、代わりに :remote => true を渡すようになりました。例: form_for @post :remote => true HTML 出力をエスケープするために h(string) を呼び出す必要はなくなりました。すべてのビュー テンプレートでデフォルトでオンになっています。エスケープされていない文字列が必要な場合は、raw(string) を呼び出します。ヘルパーはデフォルトで HTML 5 を出力するようになりました。フォーム ラベル ヘルパーは、単一の値を使用して I18n から値を取得するようになりました。そのため、 f.label :name は :name 変換を取得します。 I18n の選択ラベルは、:en.support.select ではなく :en.helpers.select になるはずです。 HTML 出力の末尾のキャリッジ リターンを削除するために、ERb テンプレート内のルビ補間の末尾にマイナス記号を配置する必要がなくなりました。 grouped_collection_select ヘルパーをアクション ビューに追加しました。 Action View では、javascript_include_tag および stylesheet_include_tag ヘルパーにリストされている CSS スタイルシートと JavaScript ファイルが見つからない場合に例外が発生するようになりました。コンテンツ用?が追加され、レンダリング前にビュー内のコンテンツの存在を確認できるようになりました。 アクティブレコード Arel の追加により、Active Record がそのメソッドでリレーションを返せるようになりました。これらの関係は連鎖することができます。これらを提供するメソッドのいくつかは次のとおりです。 where – 関係に関する条件、返される内容を提供します。 select – データベースから返したいモデルの属性を選択します。 group – 指定された属性の関係をグループ化します。 have – グループ関係を制限する式 (GROUP BY 制約) を提供します。 joins – リレーションを別のテーブルに結合します。句 - 結合関係を制限する式 (JOIN 制約) を提供します。含む - 事前に読み込まれた他の関係が含まれます。 order – 指定された式に基づいて関係を順序付けします。制限 – 指定されたレコード数との関係を制限します。 lock – テーブルから返されたレコードをロックします。 readonly – データの読み取り専用コピーを返します。 from – 複数のテーブルからリレーションシップを選択する方法を提供します。スコープ – (以前はnamed_scope) リレーションを返し、他のリレーション メソッドと連鎖させることができます。 with_scope – および with_exclusive_scope もリレーションを返すようになり、チェーンできるようになりました。 上記のメソッドの一部を使用した例 red_items = item.where(:colour => 'red') red_items.find(1) item = red_items.new ここで、item.colour を指定すると、出力は => red になります。

red_items.存在しますか? red_items.update_all :colour => 'black' red_items.exists?出力=> falseを返します

別の例を挙げると

cars = Car.where(:colour => 'black') これではクエリ出力が得られません。選択を実行したい場合は、次の cars.each {|c| を追加する必要があります。 c.nameを入れます }

上記の関係は遅延読み込みと呼ばれます。これは、フラグメント キャッシュと併用して非常に便利です。したがって、コントローラーのアクションでは、次のようにすることができます

def インデックス @recent_items = item.limit(10).order('created_at DESC') end

そしてあなたのビューでは:<che('recent_items') do %> <% @recent_items.each do |item| %> … <% end %> 上記の例では、@recent_items はビューからの @recent_items.each 呼び出しでロードされます。コントローラーは実際にはクエリを実行しないため、特別な回避策を必要とせずにフラグメント キャッシュがより効果的になります。古い API に対して次のようないくつかの機能強化も行われました。アクティブレコードオブジェクトに。 SQLite 2 のサポートは、SQLite 3 に代わって廃止されました。MySQL のカラム順序のサポート。 PostgreSQL アダプターの TIME ZONE サポートが修正されたため、不正な値が挿入されなくなりました。 PostgreSQL のテーブル名で複数のスキーマをサポートします。 XML データ型列に対する PostgreSQL のサポート。 table_name がキャッシュされるようになりました。 Oracle アダプターに関しても大量の作業が行われ、多くのバグが修正されました。 Active Record クラスのnamed_scope は非推奨となり、名前が単にscopeに変更されました。スコープ メソッドでは、代わりにリレーション メソッドの使用に移行する必要があります。

:conditions => {} ファインダー メソッド、たとえば、scope :since, lambda {|time| where(“作成時刻 > ?”, 時間) }。 save(false) は非推奨となり、save(:validate => false) が優先されます。 ActiveRecord の I18n エラー メッセージは、:en.activerecord.errors.template から :en.errors.template に変更する必要があります。 model.errors.on は非推奨となり、model.errors[] validates_presence_of => validates が優先されます。 :presence => true ActiveRecord::Base.colorize_logging と config.active_record.colorize_logging は、Rails::Subscriber.colorize_logging または config.colorize_logging を優先して非推奨になりました。 find(:first) と find(:all) (オプションなし) も同様です。何よりもまず優先されるべきです。 アクティブモデル Rails 2.3 には、モノリシック コンポーネントにロックされた非常に優れた機能が大量にあります。 Rails 3 では、ActionPack で多くの機能が公開され、ルーター、ディスパッチャ、および ActionController の個々の部分を簡単に再利用できるようになりました。検証は Active Record から Active Model に移動され、Rails 3 の ORM ライブラリ間で機能する検証へのインターフェイスが提供されます。 現在、すべての validates クラス メソッドにオプションを渡すことができる validates :attribute, options_hash ショートカット メソッドが追加されています。複数のオプションを validate メソッドに渡すことができます。 validates メソッドには次のオプションがあります::acceptance => Boolean。 :confirmation => ブール値。 :exclusion => { :in => 列挙可能 }。 :inclusion => { :in => 列挙可能 }。 :format => { :with => 正規表現、:on => :create }。 :length => { :maximum => Fixnum }。 :numericality => ブール値。 :presence => ブール値。 :uniqueness => ブール値。 アクションディスパッチ ルーティングの新しくクリーンな実装は、ActionDispatch を使用して行われます。各アプリケーションによって定義されたルートは、アプリケーション モジュール内で名前空間に配置されるようになりました。例: routers.rb ファイルの最初の行、つまり ActionController: :Routing: :Routes.draw do |map| map.resources :post end は AppName: :Application.routes do resource :posts end に置き換えられました match メソッドがルーターに追加されました。任意の Rack アプリケーションを、一致したルートに渡すことができます。ルートはブロックで表現できます。たとえば、controller :home { match '/:action' } を呼び出すことができます。例: map.connect 'products/:id', :controller => 'catalog',:action => 'view' match 'products/:id' => 'catalog#view' Rails 3 の大部分は内部的に書き直されていますが、Routes DSL は Rails 3 で完全に改訂されています。これまでに何度か根本から書き直されており、反復のたびに速度と柔軟性がもたらされました。新しい DSL はキーストロークが少なく、見た目もすっきりしています。 Rails 2 の典型的な RESTful ルート ファイルは次のとおりです。map.resources :products, :member => {:short => :post}, :collection => {:long => :get} do |products| products.resource :category end Rails 3 では次のようになります。 リソース :製品はリソース :カテゴリを実行します メンバードポスト:ショートエンド コレクション取得:ロングエンドエンド

Rails の多くのプロパティに多くの追加と変更が行われています。新しい API とその構文に対する見方を変えるのは時期尚早かもしれませんが、追加された下位互換性レイヤーのおかげで、古いスタイルの構文も依然として機能します。ただし、これは Rails 3.1 リリースでは削除される予定です。

ご連絡ください。

最新のアップデートを購読する

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

jaJapanese