Ruby-on-rails-2.1-rails-and-ajax
AJAX on Rails 2.1
Ajaxは[。underline] #A#* synchronous * [。underline] #Ja# vaScriptおよび[。underline] #X# MLを表します。 Ajaxは単一のテクノロジーではありません。それはいくつかのテクノロジーのスイートです。 Ajaxには次のものが組み込まれています-
- Webページのマークアップ用のXHTML
- スタイリング用のCSS
- DOMを使用した動的な表示と対話
- XMLを使用したデータの操作と交換
- XMLHttpRequestを使用したデータ取得
- これらすべてを結び付ける接着剤としてのJavaScript
Ajaxを使用すると、ページ全体のコンテンツを更新することなく、Webページのデータを取得できます。 基本的なWebアーキテクチャでは、ユーザーはリンクをクリックするか、フォームを送信します。 フォームがサーバーに送信され、サーバーが応答を返します。 その後、新しいページにユーザーの応答が表示されます。
Ajaxを使用したWebページを操作すると、バックグラウンドでAjaxエンジンがロードされます。 エンジンはJavaScriptで記述されており、Webサーバーと通信し、結果をユーザーに表示することがその役割です。 Ajaxを使用したフォームを使用してデータを送信すると、サーバーはサーバーの応答を含むHTMLフラグメントを返し、ページ全体を更新するのではなく、新規または変更されたデータのみを表示します。
AJAXの詳細については、リンク:/ajax/index [AJAXチュートリアル]を参照してください。
RailsによるAjaxの実装方法
Railsには、Ajax操作を実装するためのシンプルで一貫したモデルがあります。 ブラウザが最初のWebページをレンダリングして表示すると、さまざまなユーザーアクションによって、新しいWebページ(従来のWebアプリケーションなど)が表示されるか、Ajax操作がトリガーされます-
- 一部のトリガーが起動します-このトリガーは、ユーザーがボタンまたはリンクをクリックする、ユーザーがフォームまたはフィールドのデータを変更する、または定期的なトリガー(タイマーに基づく)である可能性があります。
- * Webクライアントはサーバーを呼び出します*-JavaScriptメソッド_XMLHttpRequest_は、トリガーに関連付けられたデータをサーバー上のアクションハンドラーに送信します。 データは、チェックボックスのID、入力フィールドのテキスト、またはフォーム全体である場合があります
- サーバーは処理を行います-サーバー側のアクションハンドラー(Railsコントローラーアクション)はデータを処理し、HTMLフラグメントをWebクライアントに返します。
- クライアントは応答を受け取ります-Railsが自動的に作成するクライアント側のJavaScriptは、HTMLフラグメントを受け取り、それを使用して現在のページのHTMLの指定された部分、多くの場合<div>タグのコンテンツを更新します。
これらの手順はRailsアプリケーションでAjaxを使用する最も簡単な方法ですが、少し余分な作業を行うことで、サーバーにAjaxリクエストへの応答としてあらゆる種類のデータを返させることができます。関与する相互作用。
AJAXの例
Railsの残りの概念について議論する間、ライブラリの例を取り上げました。 そこには subject というテーブルがあり、移行時にいくつかのサブジェクトを追加していました。 これまで、この表のサブジェクトを追加および削除する手順は提供していません。
この例では、サブジェクトテーブルで操作を提供、一覧表示、表示、および作成します。 前の章で説明したライブラリ情報システムについて理解していない場合は、最初に前の章を完了してからAJAX on Railsを続行することをお勧めします。
コントローラーの作成
件名のコントローラーを作成しましょう。 それは次のように行われます-
このコマンドは、コントローラーファイルapp/controllers/subject_controller.rbを作成します。 任意のテキストエディタでこのファイルを開き、次のコンテンツを持つように変更します-
ここで、これらのすべての機能の実装部分について、前の章で説明したのと同じ方法で説明します。
リストメソッドの実装
これは、前に説明した例に似ており、データベースで利用可能なすべてのサブジェクトをリストするために使用されます。
showメソッドの実装
これも前述の例に似ており、渡されたIDに対応する特定のサブジェクトを表示するために使用されます。
createメソッドの実装
この部分は少し新しいです。 ここでは、ページを他のページにリダイレクトしていません。ページ全体ではなく、変更された部分のみをレンダリングしています。
ビューを作成する
次に、パーシャルを作成するcreateメソッドを除く、すべてのメソッドのビューファイルを作成します。
listメソッドのビューの作成
/app/view/subjectにlist.rhtmlファイルを作成し、次のコードを入力します。
ここでは、@ subjects配列を繰り返し処理し、配列内の各項目について参照しているサブジェクトへのリンクを含む<li>要素を出力しています。 さらに、特定の主題の本の数を括弧内に出力しています。 Railsの関連付けにより、関係を簡単に確認して、このような情報を取得できます。
次に、http://localhost:3000/subject/listを使用して件名リストを参照してみてください。 次の画面が表示されます。
showメソッドのビューの作成
/app/view/subjectにファイルshow.rhtmlを作成し、次のコードを入力します。
今、任意の主題をクリックしてみてください、あなたはその主題の下で利用可能なすべての本のリストを見つけるでしょう。
_create_メソッドのビューの作成
ビューの代わりに*部分*を使用しているため、 create メソッドのビューを作成しません。 次のセクションでは、createメソッドのパーシャルを作成します。
Ajaxサポートの追加
RailsアプリケーションでAjaxサポートを取得するには、必要なJavaScriptファイルをレイアウトに含める必要があります。 Railsには、Ajaxの使用を非常に簡単にするいくつかのライブラリがバンドルされています。 2つのライブラリ-link:/prototype/index [prototype]とlink:/script.aculo.us/index [script.aculo.us]は非常に人気があります。
Prototypeおよびscript.aculo.usサポートをアプリケーションに追加するには、app/views/layoutsでstandard.rhtmlレイアウトファイルを開き、</head>タグの直前に次の行を追加し、変更を保存します-
これには、テンプレート内のPrototypeライブラリとscript.aculo.usライブラリの両方が含まれているため、それらのエフェクトにはどのビューからでもアクセスできます。
次に、app/views/subject/list.rhtmlの下部に次のコードを追加します。
link_to_functionメソッドを使用すると、Prototype JavaScriptライブラリのパワーを利用して適切なDOM操作を行うことができるため、link_toメソッドの代わりにlink_to_functionを使用しています。
2番目のセクションは、add_subject <div>の作成です。 CSS表示プロパティを使用して、デフォルトで非表示に可視性を設定していることに注意してください。 前述のlink_to_functionは、このプロパティを変更し、ユーザーに<div>を表示して、新しいサブジェクトを追加するために必要な入力を取得します。
次に、 form_remote_tag を使用してAjaxフォームを作成します。 このRailsヘルパーは start_form_tag タグに似ていますが、このメソッドのAjaxアクションをトリガーする必要があることをRailsフレームワークに知らせるためにここで使用されます。 form_remote_tagは、start_form_tagと同様に*:action *パラメーターを取ります。
:update *と:position *の2つの追加パラメーターもあります。
- *:update *パラメーターは、RailsのAjaxエンジンに更新する要素を指示します そのIDに基づきます。 この場合、それは<ul>タグです。
- *:position *パラメーターは、新しく追加された場所をエンジンに指示します DOMのオブジェクト。 番号なしリストの下部(:bottom)または上部(:top)に設定できます。
次に、標準のフォームフィールドを作成し、ボタンを以前と同様に送信し、end_form_tagでまとめて<form>タグを閉じます。 意味が正しく、有効なXHTMLであることを確認してください。
createメソッドのパーシャルの作成
サブジェクトの追加中に_create_メソッドを呼び出しており、このcreateメソッド内では、1つのパーシャルを使用しています。 実際に実際に進む前に、この*部分*を実装しましょう。
app/views/subjectの下に、* _ subject.rhtmlという名前の新しいファイルを作成します。*すべてのパーシャルには、先頭にアンダースコア(_)が付いていることに注意してください。
このファイルに次のコードを追加します-
これで、各サブジェクトが追加された後にページが更新されるのを待たずに、複数のサブジェクトを簡単に追加できます。 次に、http://localhost:3000/subject/listを使用して件名リストを参照してみてください。 次の画面が表示されます。 件名を追加してください。
[追加]ボタンを押すと、使用可能なすべてのサブジェクトの下部にサブジェクトが追加され、ページが更新されたように感じられません。