Ruby-on-rails-rails-quick-guide

提供:Dev Guides
移動先:案内検索

Ruby on Rails-クイックガイド

Ruby on Rails-はじめに

Rubyとは何ですか?

Railsに乗る前に、RailsのベースであるRubyのいくつかのポイントを復習しましょう。

Rubyはの成功した組み合わせです-

  • Smalltalkの概念的な優雅さ、
  • Pythonの使いやすさと学習、そ​​して
  • Perlのプラグマティズム。

ルビーは-

  • 高レベルのプログラミング言語。
  • Perl、Python、Tcl/TKのように解釈されます。
  • Smalltalk、Eiffel、Ada、Javaのようなオブジェクト指向。

なぜルビーなのか?

Rubyは日本で生まれたもので、現在ではアメリカやヨーロッパでも人気が高まっています。 次の要因が人気に貢献しています-

  • 簡単に学べる
  • オープンソース(非常に自由なライセンス)
  • 豊富なライブラリ
  • 拡張が非常に簡単
  • 本当にオブジェクト指向
  • 少ないバグで少ないコーディング
  • 役立つコミュニティ

Rubyを使用する理由は数多くありますが、Rubyを実装する前に考慮しなければならない欠点もいくつかあります。

  • パフォーマンスの問題-PerlやPythonに匹敵しますが、依然としてインタープリター言語であり、CやC ++などの高レベルプログラミング言語と比較することはできません。
  • スレッドモデル-Rubyはネイティブスレッドを使用しません。 Rubyスレッドは、ネイティブOSスレッドとして実行されるのではなく、VMでシミュレートされます。

サンプルRubyコード

「Hello Ruby」を印刷するサンプルRubyコードを次に示します。

# The Hello Class
class Hello

   def initialize( name )
      @name = name.capitalize
   end

   def salute
      puts "Hello #{@name}!"
   end

end

# Create a new object
h = Hello.new("Ruby")

# Output "Hello Ruby!"
h.salute

出力-これにより、次の結果が生成されます-

Hello Ruby!

埋め込みRuby

Rubyは、_Seki Masatoshi_によって作成されたERB(Embedded Ruby)と呼ばれるプログラムを提供します。 ERBを使用すると、HTMLファイル内にRubyコードを配置できます。 ERBは単語ごとに読み、特定の時点でドキュメントに埋め込まれたRubyコードに遭遇すると、Rubyコードの実行を開始します。

あなたはERB文書を準備するために2つのことだけを知る必要があります-

  • Rubyコードを実行する場合は、* <%%>。*で囲みます。
  • コード実行の結果を出力の一部として出力する場合は、コードを <%= と*%> *で囲みます。

これが一例です。 コードをerbdemo.rbファイルに保存します。 Rubyファイルの拡張子は .rb になることに注意してください-

<% page_title = "Demonstration of ERB" %>
<% salutation = "Dear programmer," %>

<html>

   <head>
      <title><%= page_title %></title>
   </head>

   <body>
      <p><%= salutation %></p>
      <p>This is an example of how ERB fills out a template.</p>
   </body>

</html>

次に、コマンドラインユーティリティ erb を使用してプログラムを実行します。

tp> erb erbdemo.rb

これは、次の結果を生成します-

<html>

   <head>
      <title>Demonstration of ERb</title>
   </head>

   <body>
      <p>Dear programmer,</p>
      <p>This is an example  of how ERb fills out a template.</p>
   </body>

</html>

Railsとは何ですか?

  • 非常に生産的なWebアプリケーションフレームワーク。
  • David Heinemeier HanssonによるRubyでの記述。
  • Railsを使用すると、通常のJavaフレームワークを使用した場合よりも少なくとも10倍速くWebアプリケーションを開発できます。
  • データベースを使用したWebアプリケーションを開発するためのオープンソースRubyフレームワーク。
  • データベーススキーマを使用してコードを構成します。
  • コンパイル段階は必要ありません。

フルスタックフレームワーク

  • Model-View-Controllerパターンを使用して、データベース駆動のWebアプリケーションを作成するために必要なすべてが含まれています。
  • フルスタックフレームワークであるということは、より少ないコードでシームレスに連携するようにすべてのレイヤーが構築されることを意味します。
  • 他のフレームワークよりも少ないコード行が必要です。

設定より規約

  • Railsでは、構成ファイルを排除して、規則、リフレクション、および動的ランタイム拡張機能を優先しています。
  • アプリケーションコードと実行中のデータベースには、Railsが知る必要のあるすべてのものがすでに含まれています。

Railsの強み

Railsには生産性を高める機能が満載されており、次の機能の多くが相互に構築されています。

メタプログラミング

他のフレームワークがゼロから大規模なコード生成を使用する場合、Railフレームワークはメタプログラミング技術を使用してプログラムを記述します。 Rubyはメタプログラミングに最適な言語の1つであり、Railsはこの機能をうまく利用しています。 Railsもコード生成を使用しますが、手間のかかる作業はメタプログラミングに依存しています。

アクティブレコード

Railsは、オブジェクトをデータベースに保存するActive Recordフレームワークを導入します。 RailsバージョンのActive Recordは、データベーススキーマ内の列を検出し、メタプログラミングを使用してそれらをドメインオブジェクトに自動的にアタッチします。

構成より規約

足場

NETまたはJava用のほとんどのWeb開発フレームワークでは、構成コードのページを書く必要があります。 提案された命名規則に従えば、Railsは多くの設定を必要としません。.

多くの場合、開発の初期段階で一時的なコードを作成して、アプリケーションをすばやく起動し、主要なコンポーネントがどのように連携するかを確認します。 Railsは必要な足場の多くを自動的に作成します。

組み込みテスト

Railsは単純な自動テストを作成し、それを拡張できます。 Railsは、テストケースの作成と実行を容易にするハーネスとフィクスチャと呼ばれるサポートコードも提供します。 Rubyは、rakeユーティリティを使用してすべての自動テストを実行できます。

3つの環境

Railsは、開発、テスト、実稼働の3つのデフォルト環境を提供します。 それぞれの動作はわずかに異なるため、ソフトウェア開発サイクル全体が簡単になります。 たとえば、Railsはテスト実行ごとにTestデータベースの新しいコピーを作成します。

Ruby on Rails-インストール

Ruby on Rails Frameworkを使用してWebアプリケーションを開発するには、次のソフトウェアをインストールする必要があります-

  • Ruby
  • Railsフレームワーク
  • Webサーバー
  • データベースシステム

コンピューターにWebサーバーとデータベースシステムが既にインストールされていることを前提としています。 Rubyに付属のWEBrick Web Serverを使用できます。 ただし、ほとんどのWebサイトは実稼働環境でApacheまたはlightTPD Webサーバーを使用しています。

Railsは、MySQL、PostgreSQL、SQLite、Oracle、DB2、SQL Serverなど、多くのデータベースシステムで動作します。 データベースをセットアップするには、対応するデータベースシステムセットアップマニュアルを参照してください。

WindowsおよびLinux上のRailsのインストール手順を見てみましょう。

WindowsでのRailsのインストール

Ruby on Railsをインストールするには、以下の手順に従ってください。

ステップ1:Rubyのバージョンを確認する

最初に、Rubyが既にインストールされているかどうかを確認します。 コマンドプロンプトを開き、 ruby​​ -v と入力します。 Rubyが応答し、バージョン番号が2.2.2以上の場合は、 gem --version と入力します。 エラーが発生しない場合は、* Rubyのインストール*の手順をスキップしてください。 それ以外の場合は、新しいRubyをインストールします。

ステップ2:Rubyをインストールする

Rubyがインストールされていない場合は、 http://rubyinstaller.org/[rubyinstaller.org] からインストールパッケージをダウンロードします。 ダウンロード*リンクに従って、結果のインストーラーを実行します。 これはexeファイル *ruby​​installer-2.2.2.x.exe であり、シングルクリックでインストールされます。 これは非常に小さなパッケージであり、このパッケージとともにRubyGemsも入手できます。 詳細については、*リリースノート*を確認してください。

Rubyホーム

ステップ3:Railsをインストールする

  • Railsのインストール*-Rubygemsをロードすると、コマンドラインから次のコマンドを使用してすべてのRailsとその依存関係をインストールできます-
C:\> gem install rails

GEMインストール

注意-上記のコマンドは、すべての依存関係をインストールするのに時間がかかる場合があります。 gemsの依存関係をインストールする間、インターネットに接続していることを確認してください。

ステップ4:Railsバージョンを確認する

次のコマンドを使用して、レールのバージョンを確認します。

C:\> rails -v

出力

Rails 4.2.4

おめでとうございます。 これで、Windowsを介してRailsを使用できます。

LinuxでのRailsのインストール

*rbenv* を使用してLinuxにRuby On Railsをインストールしています。 軽量のRubyバージョン管理ツールです。 *rbenv* は、Rubyのさまざまなバージョンを管理する簡単なインストール手順と、Ruby on Railsアプリケーションを開発するための堅実な環境を提供します。

以下の手順に従って、rbenvツールを使用してRuby on Railsをインストールします。

ステップ1:前提条件の依存関係をインストールする

まず、 git-core とRuby on Railsのインストールに役立ついくつかのruby依存をインストールする必要があります。 yum を使用してRailsの依存関係をインストールするには、次のコマンドを使用します。

tp> sudo yum install -y git-core zlib zlib-devel gcc-c++ patch readline readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison curl sqlite-devel

ステップ2:rbenvをインストールする

次に、rbenvをインストールし、適切な環境変数を設定します。 次のコマンドセットを使用して、gitリポジトリのrbenvを取得します。

tp> git clone git://github.com/sstephenson/rbenv.git .rbenv
tp> echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
tp> echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
tp> exec $SHELL

tp> git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
tp> echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' << ~/.bash_profile
tp> exec $SHELL

ステップ3:Rubyをインストールする

Rubyをインストールする前に、インストールするRubyのバージョンを決定します。 Ruby 2.2.3をインストールします。 Rubyをインストールするには、次のコマンドを使用します。

tp> rbenv install -v 2.2.3

現在のRubyバージョンをデフォルトとして設定するには、次のコマンドを使用します。

tp> rbenv global 2.2.3

次のコマンドを使用して、Rubyバージョンを確認します。

tp> ruby -v

出力

ruby 2.2.3p173 (2015-08-18 revivion 51636) [X86_64-linux]

Rubyは、サポートされている依存関係をインストールするためのキーワード gem を提供します。それらを*宝石*と呼びます。 Ruby-gemsのドキュメントをインストールしたくない場合は、次のコマンドを使用します。

tp> echo "gem: --no-document" > ~/.gemrc

その後、Bundler gemをインストールすると、アプリケーションの依存関係を管理するのに役立ちます。 次のコマンドを使用して、Bundler gemをインストールします。

tp> gem install bundler

ステップ4:Railsをインストールする

Railsバージョン4.2.4をインストールするには、次のコマンドを使用します。

tp> install rails -v 4.2.4

次のコマンドを使用して、Rails実行可能ファイルを使用可能にします。

tp> rbenv rehash

Railsのバージョンを確認するには、次のコマンドを使用します。

tp> rails -v

出力

tp> Rails 4.2.4

Ruby on Railsフレームワークでは、Railsの機能を管理するためにJavaScriptランタイム環境(Node.js)が必要です。 次に、Node.jsを使用して、Railsの機能であるAsset Pipelineを管理する方法を確認します。

ステップ5:JavaScriptランタイムをインストールする

YumリポジトリからNode.jsをインストールしましょう。 EPEL yumリポジトリからNode.jsを取得します。 次のコマンドを使用して、EPELパッケージをyumリポジトリーに追加します。

tp> sudo yum -y install epel-release

Node.jsパッケージをインストールするには、次のコマンドを使用します。

tp> sudo yum install nodejs

おめでとうございます。 これで、Linux上でRailsを使用できます。

ステップ6:データベースのインストール

デフォルトでは、Railsはsqlite3を使用しますが、MySQL、PostgreSQL、またはその他のRDBMSをインストールすることもできます。 これはオプションです。データベースがインストールされている場合は、この手順をスキップできます。また、railsサーバーを起動するためにデータベースをインストールすることは必須ではありません。 このチュートリアルでは、PostgreSQLデータベースを使用しています。 したがって、次のコマンドを使用してPostgreSQLをインストールします。

tp> sudo yum install postgresql-server postgresql-contrib
*y* で応答して、プロンプトを受け入れます。 次のコマンドを使用して、PostgreSQlデータベースクラスターを作成します。
tp> sudo postgresql-setup initdb

PostgreSQLを起動して有効にするには、次のコマンドを使用します。

tp> sudo systemctl start postgresql
tp> sudo systemctl enable postgresql

Railsを最新の状態に保つ

RubyGemsを使用してRailsをインストールしたと仮定すると、Railsを最新の状態に保つのは比較的簡単です。 WindowsとLinuxプラットフォームの両方で同じコマンドを使用できます。 次のコマンドを使用します-

tp> gem update rails

出力

次のスクリーンショットは、Windowsコマンドプロンプトを示しています。 Linuxターミナルも同じ出力を提供します。

GEMアップデート

これにより、Railsインストールが自動的に更新されます。 次回アプリケーションを再起動すると、この最新バージョンのRailsが選択されます。 このコマンドを使用している間は、インターネットに接続していることを確認してください。

インストール検証

すべてが要件に従ってセットアップされているかどうかを確認できます。 次のコマンドを使用して、デモプロジェクトを作成します。

tp> rails new demo

出力

Rails New Demo

デモレールプロジェクトを生成します。それについては後で説明します。 現在、環境がセットアップされているかどうかを確認する必要があります。 次に、次のコマンドを使用して、マシンでWEBrick Webサーバーを実行します。

tp> cd demo
tp> rails server

サーバーを起動する自動コードを生成します

Railsサーバー

今すぐブラウザを開き、次を入力します-

http://localhost:3000

「ようこそ」または「おめでとう」などのメッセージが表示されます。

Rails Welcome

Ruby on Rails-フレームワーク

フレームワークとは、アプリケーションのほとんどを作成するプログラム、プログラムセット、および/またはコードライブラリです。 フレームワークを使用するとき、あなたの仕事は、あなたが望む特定のことをさせるアプリケーションの部分を書くことです。

あなたがRailsアプリケーションを書くために着手したとき、構成や他のハウスキーピングの雑用を残して、あなたは3つの主要なタスクを実行する必要があります-

  • アプリケーションのドメインの説明とモデリング-ドメインはアプリケーションのユニバースです。 ドメインは、ミュージックストア、大学、出会い系サービス、アドレス帳、またはハードウェアインベントリです。 そのため、ここには何が含まれているのか、このユニバースにはどのエンティティが存在するのか、そしてその中のアイテムはどのように相互に関連するのかを理解する必要があります。 これは、エンティティとそれらの関係を保持するためにデータベース構造をモデリングすることと同等です。
  • このドメインで何が起こるかを指定します-ドメインモデルは静的です。動的にする必要があります。 アドレスはアドレス帳に追加できます。 楽譜はミュージックストアから購入できます。 ユーザーはデートサービスにログインできます。 学生は大学のクラスに登録できます。 ドメインの要素が参加できるすべての可能なシナリオまたはアクションを識別する必要があります。
  • ドメインの公開されているビューを選択および設計-この時点で、Webブラウザの用語で考え始めることができます。 ドメインに学生がおり、クラスに登録できることを決定したら、ようこそページ、登録ページ、確認ページなどを想像できます。 これらの各ページまたはビューは、特定の時点で物事がどのようになっているのかをユーザーに示します。

上記の3つのタスクに基づいて、Ruby on RailsはModel/View/Controller(MVC)フレームワークを処理します。

Ruby on Rails MVCフレームワーク

  • [。underline] #M#* odel * [。underline] #V#* iew * [。underline] #C#** ontroller原則は、アプリケーションの作業を3つの別個の密接に協力するサブシステムに分割します。 。

モデル(ActiveRecord)

オブジェクトとデータベース間の関係を維持し、検証、関連付け、トランザクションなどを処理します。

このサブシステムはActiveRecordライブラリに実装されており、リレーショナルデータベース内のテーブルとデータベースレコードを操作するRubyプログラムコード間のインターフェイスとバインディングを提供します。 Rubyのメソッド名は、データベーステーブルのフィールド名から自動的に生成されます。

表示(ActionView)

これは、データを提示するというコントローラーの決定によってトリガーされる、特定の形式でのデータの提示です。 これらは、JSP、ASP、PHPなどのスクリプトベースのテンプレートシステムであり、AJAXテクノロジーとの統合が非常に簡単です。

このサブシステムは、データ表示用のプレゼンテーションテンプレートを定義するための埋め込みRuby(ERb)ベースのシステムであるActionViewライブラリに実装されています。 RailsアプリケーションへのすべてのWeb接続により、ビューが表示されます。

コントローラー(ActionController)

トラフィックを誘導するアプリケーション内の機能で、一方で特定のデータのモデルを照会し、他方でそのデータを特定のビューのニーズに合った形式に整理(検索、ソート、メッセージング)します。

このサブシステムは、ActiveController(データベースインターフェイス)とActionView(プレゼンテーションエンジン)の間にあるデータブローカーであるActionControllerに実装されます。

MVCフレームワークの図的表現

以下に示すのは、Ruby on Rails Frameworkの図的表現です-

Rails Framework

MVCフレームワークのディレクトリ表現

Linux上での標準のデフォルトインストールを想定すると、次のようにそれらを見つけることができます-

tp> cd/usr/local/lib/ruby/gems/2.2.0/gems
tp> ls

次を含む(ただし、これらに限定されない)サブディレクトリが表示されます-

  • actionpack-x.y.z
  • activerecord-x.y.z
  • rails-x.y.z

Windowsのインストールでは、このようにそれらを見つけることができます-

tp>cd ruby\lib\ruby\gems\2.2.0\gems
ruby\lib\ruby\gems\2.2.0\gems\>dir

次を含む(ただし、これらに限定されない)サブディレクトリが表示されます-

MVC

ActionViewとActionControllerはActionPackの下にまとめられています。

ActiveRecordは、SQLデータベースのデータを操作するためのさまざまなプログラミング手法とショートカットを提供します。 ActionControllerおよびActionViewは、そのデータを操作および表示する機能を提供します。 Railsはすべてを結び付けます。

Ruby on Rails-ディレクトリ構造

Railsヘルパースクリプトを使用してアプリケーションを作成すると、アプリケーションのディレクトリ構造全体が作成されます。 Railsはこの構造内で必要なものを見つける場所を知っているので、入力を提供する必要はありません。

これは、アプリケーション作成時にヘルパースクリプトによって作成されたディレクトリツリーの最上位ビューです。 リリース間のマイナーな変更を除いて、すべてのRailsプロジェクトは同じ命名規則で同じ構造を持ちます。 この一貫性は、大きな利点をもたらします。プロジェクトの組織を再学習することなく、Railsプロジェクト間をすばやく移動できます。

このディレクトリ構造を理解するために、インストールの章で作成した demo アプリケーションを使用してみましょう。 簡単なヘルパーコマンド rails demo を使用して作成できます。

今、次のようにデモアプリケーションのルートディレクトリに移動します-

tp> cd demo
demo> dir

あなたは次のようにWindowsでディレクトリ構造を見つけるでしょう-

ディレクトリ

次に、各ディレクトリの目的を説明しましょう

  • app -アプリケーションコンポーネントを整理します。 ビュー(ビューとヘルパー)、コントローラー(コントローラー)、およびバックエンドビジネスロジック(モデル)を保持するサブディレクトリがあります。
  • app/controllers -controllersサブディレクトリは、Railsがコントローラクラスを検索する場所です。 コントローラーは、ユーザーからのWeb要求を処理します。
  • app/helpers -ヘルパーサブディレクトリには、モデル、ビュー、およびコントローラークラスを支援するために使用されるヘルパークラスが保持されます。 これにより、モデル、ビュー、およびコントローラーのコードを小さく、集中し、整理された状態に保つことができます。
  • app/models -modelsサブディレクトリは、アプリケーションのデータベースに保存されたデータをモデル化しラップするクラスを保持します。 ほとんどのフレームワークでは、アプリケーションのこの部分がかなり面倒で、退屈で、冗長で、エラーが発生しやすくなります。 Railsを使えば簡単です!
  • app/view -viewsサブディレクトリには、アプリケーションからのデータを入力し、HTMLに変換して、ユーザーのブラウザーに戻るための表示テンプレートが保持されます。
  • app/view/layouts -ビューで使用されるレイアウトのテンプレートファイルを保持します。 これは、ビューをラップする一般的なヘッダー/フッターメソッドをモデル化します。 ビューで、<tt> layout:default </tt>を使用してレイアウトを定義し、defaultl.erbという名前のファイルを作成します。 defaultl.erb内で、<%yield%>を呼び出して、このレイアウトを使用してビューをレンダリングします。
  • * components-このディレクトリには、コンポーネント、モデル、ビュー、コントローラーをバンドルする小さな自己完結型アプリケーションが含まれています。
  • config -このディレクトリには、データベース構成(database.yml内)、Rails環境構造(environment.rb)、および着信Web要求のルーティング(routes.rb)など、アプリケーションに必要な少量の構成コードが含まれます。 )。 環境ディレクトリにあるファイルを使用して、3つのRails環境の動作をテスト、開発、および展開用に調整することもできます。
  • db -通常、Railsアプリケーションには、リレーショナルデータベーステーブルにアクセスするモデルオブジェクトがあります。 このディレクトリに作成して配置するスクリプトを使用して、リレーショナルデータベースを管理できます。
  • doc -RubyにはRubyDocというフレームワークがあり、作成したコードのドキュメントを自動的に生成できます。 コード内のコメントでRubyDocを支援できます。 このディレクトリには、RubyDocで生成されたすべてのRailsおよびアプリケーションのドキュメントが保持されます。
  • lib -明示的に他の場所(ベンダーライブラリなど)に属さない限り、ここにライブラリを配置します。
  • log -エラーログはここにあります。 Railsは、さまざまなエラーログの管理に役立つスクリプトを作成します。 サーバー(server.log)と各Rails環境(development.log、test.log、production.log)の個別のログがあります。
  • public -Webサーバーのパブリックディレクトリと同様に、このディレクトリには、JavaScriptファイル(public/javascripts)、グラフィックス(public/images)、スタイルシート(public/stylesheets)、HTMLなどの変更のないWebファイルがあります。ファイル(パブリック)。
  • script -このディレクトリには、Railsで使用するさまざまなツールを起動および管理するためのスクリプトが含まれています。 たとえば、コードを生成(生成)し、Webサーバー(サーバー)を起動するスクリプトがあります。
  • test -作成するテストとRailsが作成するテストはすべてここにあります。 モック(mocks)、ユニットテスト(unit)、フィクスチャ(fixtures)、および機能テスト(functional)のサブディレクトリが表示されます。
  • tmp -Railsはこのディレクトリを使用して、中間処理用の一時ファイルを保持します。
  • vendor -サードパーティベンダーが提供するライブラリ(基本的なRailsディストリビューションを超えたセキュリティライブラリやデータベースユーティリティなど)はここにあります。

これらのディレクトリとは別に、demoディレクトリには2つのファイルがあります。

  • README -このファイルには、レールアプリケーションに関する基本的な詳細と、上記で説明したディレクトリ構造の説明が含まれています。
  • Rakefile -このファイルはUnix Makefileに似ており、Railsコードの構築、パッケージ化、テストに役立ちます。 これは、Rubyインストールとともに提供されるrakeユーティリティによって使用されます。

Ruby on Rails-例

この章では、本を保持および管理するためのシンプルでありながら操作可能なオンラインライブラリシステムを作成します。

このアプリケーションには基本的なアーキテクチャがあり、2つのActiveRecordモデルを使用して構築され、保存されるデータの種類を記述します-

  • 実際のリストを説明する書籍。
  • 件名。書籍をグループ化するために使用されます。

Railsアプリケーションを作成するためのワークフロー

Railsアプリケーションを作成するための推奨ワークフローは次のとおりです-

  • railsコマンドを使用して、アプリケーションの基本的なスケルトンを作成します。
  • PostgreSQLサーバーにデータベースを作成して、データを保持します。
  • データベースが置かれている場所とそのログイン資格情報を知るようにアプリケーションを構成します。
  • Rails Active Records(Models)を作成します。これらは、コントローラーで使用するビジネスオブジェクトであるためです。
  • データベースのテーブルと列の作成と保守を簡素化する移行を生成します。
  • コントローラーコードを記述して、アプリケーションに命を吹き込みます。
  • ユーザーインターフェイスを介してデータを表示するビューを作成します。

それでは、ライブラリアプリケーションの作成から始めましょう。

空のRails Webアプリケーションを作成する

Railsは、ランタイムWebアプリケーションフレームワークであり、Webアプリケーションの開発時に行う多くのことを自動化するヘルパースクリプトのセットでもあります。 この手順では、このようなヘルパースクリプトの1つを使用して、ディレクトリ構造全体とファイルの初期セットを作成し、ライブラリシステムアプリケーションを起動します。

  • rubyインストールディレクトリに移動して、アプリケーションを作成します。
  • 次のコマンドを実行して、ライブラリアプリケーションのスケルトンを作成します。 現在のディレクトリにディレクトリ構造を作成します。
tp> rails new library

これにより、空のRailsアプリケーションのフォルダーとファイルの完全なディレクトリツリーを含むライブラリアプリケーションのサブディレクトリが作成されます。 アプリケーションの完全なディレクトリ構造を確認してください。 詳細については、リンク:/ruby​​-on-rails/rails-directory-structure [Railsのディレクトリ構造]を確認してください。

開発作業のほとんどは、 library/app サブディレクトリでファイルを作成および編集することです。 ここでそれらを使用する方法の簡単な要約です-

  • _controllers_サブディレクトリは、Railsがコントローラクラスを検索する場所です。 コントローラーは、ユーザーからのWeb要求を処理します。
  • _views_サブディレクトリには、アプリケーションからのデータを入力し、HTMLに変換して、ユーザーのブラウザーに戻るための表示テンプレートが保持されます。
  • _models_サブディレクトリには、アプリケーションのデータベースに保存されたデータをモデル化しラップするクラスが含まれています。 ほとんどのフレームワークでは、アプリケーションのこの部分がかなり面倒で、退屈で、冗長で、エラーが発生しやすくなります。 Railsはそれを非常にシンプルにします。
  • _helpers_サブディレクトリには、モデル、ビュー、およびコントローラークラスを支援するために使用されるヘルパークラスが保持されます。 これにより、モデル、ビュー、およびコントローラーのコードを小さく、集中し、整理された状態に保つことができます。

Webサーバーの起動

Rails Webアプリケーションは、事実上すべてのWebサーバーで実行できますが、Rails Webアプリケーションを開発する最も便利な方法は、組み込みのWEBrick Webサーバーを使用することです。 このWebサーバーを起動して、空のライブラリアプリケーションを参照しましょう-

このサーバーは、次のようにアプリケーションディレクトリから起動されます。 ポート番号3000で実行されます。

tp> cd ruby\library
tp\ruby\library\> Rails server

以下に示すように、サーバーを起動する自動コードを生成します-

Railsサーバー

これにより、WEBrick Webサーバーが起動します。

ブラウザを開いて、 http://127.0.0.1:3000 を参照します。 すべてが正常に終了した場合、WEBrickからの挨拶メッセージが表示されます。そうでない場合、設定に問題があります。 すべてがうまくいけば、次のように出力が生成されます。

Webサーバー

次は何ですか?

次の章では、アプリケーションのデータベースを作成する方法と、作成したデータベースにアクセスするために必要な構成について説明します。

さらに、Rails移行とは何か、データベーステーブルを維持するためにどのように使用されるかを確認します。

Ruby on Rails-データベースのセットアップ

この章を始める前に、データベースサーバーが稼働していることを確認してください。 Ruby on Railsでは、3つのデータベースを作成することをお勧めします-開発、テスト、および実稼働環境用のデータベースです。 慣習に従って、それらの名前は次のようになります-

  • library_development
  • library_production
  • library_test

3つすべてを初期化し、完全な読み取りおよび書き込み権限を持つユーザーとパスワードを作成する必要があります。 アプリケーションに root ユーザーIDを使用しています。

MySQLのデータベースセットアップ

MySQLでは、アプリケーションに root ユーザーIDを使用しています。 これを行うMySQLコンソールセッションは次のようになります-

mysql> create database library_development;
Query OK, 1 row affected (0.01 sec)

mysql> grant all privileges on library_development.*
to 'root'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

さらに2つのデータベース library_production および library_test に対して同じことを実行できます。

database.ymlの構成

この時点で、データベースのユーザー名とパスワードをRailsに知らせる必要があります。 これは、作成したRailsアプリケーションの library \ config サブディレクトリにある database.yml ファイルで行います。 このファイルには、MySQLデータベースのライブ構成セクションがあります。 使用する各セクションで、ユーザー名とパスワードの行を変更して、作成したデータベースの権限を反映する必要があります。

終了すると、次のようになります-

development:
   adapter: mysql
   database: library_development
   username: root
   password: [password]
   host: localhost

test:
   adapter: mysql
   database: library_test
   username: root
   password: [password]
   host: localhost

production:
   adapter: mysql
   database: library_production
   username: root
   password: [password]
   host: localhost

PostgreSQLのデータベースセットアップ

デフォルトでは、PostgreSQLはユーザーを提供しません。 新しいユーザーを作成する必要があります。 次のコマンドを使用して、 ruby​​user という名前のユーザーを作成します。

tp> sudo -u postgres createuser rubyuser -s

新しいユーザーのパスワードを作成する場合は、次のコマンドを使用します。

tp> sudo -u postgres psql

postgres=# \password rubyuser

データベース library_development を作成するには、次のコマンドを使用します。

postgres=# CREATE DATABASE library_development OWNER rubyuser;

CREATE DATABASE

データベース library_production を作成するには、次のコマンドを使用します。

postgres=# CREATE DATABASE library_production OWNER rubyuser;

CREATE DATABASE

データベース library_test を作成するには、次のコマンドを使用します。

postgres=# CREATE DATABASE library_test OWNER rubyuser;

CREATE DATABASE
*Ctrl + D* を押して、PosgreSQLを終了します。

database.ymlの構成

この時点で、データベースのユーザー名とパスワードをRailsに知らせる必要があります。 これは、作成したRailsアプリケーションの library \ config サブディレクトリにある database.yml ファイルで行います。 このファイルには、PostgreSQLデータベースのライブ構成セクションがあります。 各セクションで、ユーザー名とパスワードの行を変更して、作成したデータベースの権限を反映する必要があります。

終了したら、次のようになります-

default: &default
   adapter: postgresql
   encoding: unicode

development:
   adapter: postgresql
   encoding: unicode
   database: library_development
   username: rubyuser
   password: <Password for rubyuser>

test:
   adapter: postgresql
   encoding: unicode
   database: library_test
   username: rubyuser
   password: <Password for rubyuser>

production:
   adapter: postgresql
   encoding: unicode
   database: library_production
   username: rubyuser
   password: <Password for rubyuser>

次は何ですか?

次の2つの章では、データベーステーブルをモデル化する方法と、Rails移行を使用してデータベーステーブルを管理する方法について説明します。

Ruby on Rails-アクティブレコード

Rails Active Recordは、Railsで提供されるオブジェクト/リレーショナルマッピング(ORM)レイヤーです。 それは次のとおりである標準ORMモデルに密接に従います-

  • テーブルはクラスにマップし、
  • 行がオブジェクトにマップし、
  • 列はオブジェクト属性にマップされます。

Rails Active Recordsは、リレーショナルデータベース内のテーブルとデータベースレコードを操作するRubyプログラムコードとの間のインターフェイスとバインディングを提供します。 Rubyのメソッド名は、データベーステーブルのフィールド名から自動的に生成されます。

各アクティブレコードオブジェクトには、CRUD([。underline] #C# reate、[。underline] #R# ead、[。underline] #U# pdate、および[。 underline] #D# elete)データベースアクセスのメソッド。 この戦略により、単純な設計と、データベーステーブルとアプリケーションオブジェクト間の単純なマッピングが可能になります。

ドメインモデルのSQLへの変換

Railsに対応したSQLを作成する必要があることを覚えている限り、ドメインモデルをSQLに変換することは一般に簡単です。 実際には、特定のルールに従う必要があります-

  • 各エンティティ(bookなど)は、データベース内でその名前が付けられたテーブルを取得しますが、複数(book)になります。
  • このようなエンティティ一致テーブルにはそれぞれ_id_というフィールドがあり、テーブルに挿入された各レコードの一意の整数が含まれています。
  • エンティティxとエンティティyが与えられ、エンティティyがエンティティxに属する場合、テーブルyにはx_idというフィールドがあります。
  • テーブルのフィールドの大部分は、そのエンティティの単純なプロパティ(数値または文字列)の値を格納します。

アクティブレコードファイル(モデル)の作成

前の章で紹介したライブラリアプリケーションのエンティティのアクティブレコードファイルを作成するには、アプリケーションディレクトリの最上位から次のコマンドを発行します。

library\> ruby script/generate model Book
library\> ruby script/generate model Subject

上記の* railsはモデルブックを生成します*コマンドは以下のような自動コードを生成します-

ブック生成

ブックとサブジェクトのインスタンスを保存するために、ブックとサブジェクトと呼ばれるモデルを作成するようジェネレーターに指示しています。 BookとSubjectを大文字にし、単数形を使用していることに注意してください。 これは、モデルを作成するたびに従うべきRailsパラダイムです。

生成ツールを使用すると、Railsは、モデルに固有のすべてのメソッドと定義するビジネスルール、テスト駆動開発を実行するためのユニットテストファイル、使用するサンプルデータファイル(フィクスチャと呼ばれる)を保持する実際のモデルファイルを作成します単体テスト、およびデータベースのテーブルと列の作成を容易にするRails移行を使用します。

他の多くのファイルとディレクトリの作成とは別に、これにより* book/rbsおよび subject.rb という名前のファイルが作成され、 app/models ディレクトリにスケルトン定義が含まれます。

book.rbで利用可能なコンテンツ-

class Book < ActiveRecord::Base
end

subject.rbで利用可能なコンテンツ-

class Subject < ActiveRecord::Base
end

モデル間の関連付けの作成

Railsアプリケーションに複数のモデルがある場合、それらのモデル間に接続を作成する必要があります。 これは、関連付けを介して行うことができます。 Active Recordは3種類の関連付けをサポートしています-

  • one-to-one -1つのアイテムに別のアイテムが1つだけある場合、1対1の関係が存在します。 たとえば、人の誕生日は1人だけ、犬の所有者は1人だけです。
  • * 1対多*-1つのオブジェクトが他の多くのオブジェクトのメンバーになることができる場合、1対多の関係が存在します。 たとえば、1つの主題に多数の本を含めることができます。
  • 多対多-最初のオブジェクトが1つ以上の2番目のオブジェクトに関連し、2番目のオブジェクトが1つ以上の最初のオブジェクトに関連している場合、多対多の関係が存在します。

モデルに宣言を追加することで、これらの関連付けを示します:has_one、has_many、belongs_to、およびhas_and_belongs_to_many。

次に、ライブラリデータシステム内で確立する関係をRailsに伝える必要があります。 これを行うには、book.rbとsubject.rbを次のように変更します-

class Book < ActiveRecord::Base
   belongs_to :subject
end

1つのブックが1つのサブジェクトに属することができるため、上記の例では単一のサブジェクトを使用しました。

class Subject < ActiveRecord::Base
   has_many :books
end

1つの主題が複数の本を持つことができるため、ここでは複数の本を使用しました。

モデルの検証の実装

検証の実装はRailsモデルで行われます。 データベースに入力するデータは、実際のRailsモデルで定義されているため、同じ場所で有効なデータが必要とするものを定義することのみが意味をなします。

検証は次のとおりです-

  • titleフィールドの値はNULLであってはなりません。

  • 価格フィールドの値は数値でなければなりません。

    *app \ model* subdiractoryで *book.rb* を開き、次の検証を行います-
class Book < ActiveRecord::Base
   belongs_to :subject
   validates_presence_of :title
   validates_numericality_of :price, :message=>"Error Message"
end
  • validates_presence_of -ユーザー入力の欠落から「NOT NULL」フィールドを保護します。
  • validates_numericality_of -ユーザーが非数値データを入力できないようにします。

上記の検証に加えて、他の一般的な検証があります。 リンクを確認してください:/ruby​​-on-rails/rails-quick-guide [Railsクイックガイド]。

次は何ですか?

次の章では、Rubyを使用してデータベーススキーマの変更を定義し、バージョン管理システムを使用して実際のコードと同期を保つことができるRails移行について学習します。

Ruby on Rails-移行

Rails Migrationを使用すると、Rubyを使用してデータベーススキーマの変更を定義できるため、バージョン管理システムを使用して実際のコードとの同期を保つことができます。

これには、次のような多くの用途があります-

  • 開発者のチーム-一人がスキーマを変更した場合、他の開発者は「rake migrate」を更新して実行するだけです。
  • 本稼働サーバー-データベースを最新の状態にするために新しいリリースをロールアウトするときに「rake migrate」を実行します。
  • 複数のマシン-デスクトップとラップトップの両方で開発する場合、または複数の場所で開発する場合、移行によりすべてのマシンの同期を保つことができます。

Railsの移行でできること

  • create_table(名前、オプション)
  • drop_table(name)
  • rename_table(old_name、new_name)
  • add_column(table_name、column_name、type、options)
  • rename_column(table_name、column_name、new_column_name)
  • change_column(table_name、column_name、type、options)
  • remove_column(table_name、column_name)
  • add_index(table_name、column_name、index_type)
  • remove_index(table_name、column_name)

移行はすべての基本的なデータ型をサポートします-以下は移行がサポートするデータ型のリストです-

  • string -タイトルなどの小さなデータ型用。
  • text -説明などの長いテキストデータ用。
  • 整数-整数の場合。
  • float -小数用。
  • datetime and timestamp -日付と時刻を列に保存します。
  • 日付と時刻-日付のみまたは時刻のみを保存します。
  • バイナリ-画像、音声、映画などのデータを保存します。
  • Boolean -trueまたはfalseの値を保存します。
  • 有効な列オプションは*です-以下は有効な列オプションのリストです。
  • limit (:limit ⇒“ 50”)
  • default (:default ⇒“ blah”)
  • null (:null ⇒ falseはNOT NULLを意味します)

-Rails移行によって行われるアクティビティは、フロントエンドGUIを使用して、または直接SQLプロンプトで実行できますが、Rails移行はこれらのすべてのアクティビティを非常に簡単にします。

これらの詳細については、http://api.rubyonrails.org/classes/ActiveRecord/Migrationl [Rails API]を参照してください。

移行を作成する

移行を作成するための一般的な構文は次のとおりです-

application_dir> rails generate migration table_name

これにより、db/migrate/001_table_name.rbファイルが作成されます。 移行ファイルには、データベーステーブルのデータ構造を記述する基本的なRuby構文が含まれています。

-移行ジェネレーターを実行する前に、モデルジェネレーターによって生成された既存の移行をクリーンアップすることをお勧めします。

3つのテーブル( booksとsubject )に対応する2つの移行を作成します。

書籍の移行は次のようにする必要があります-

tp> cd library
library> rails generate migration books

上記のコマンドは、次のコードを生成します。

生成

件名の移行は次のようになります-

tp> cd library
library> rails generate migration subjects

上記のコマンドは、次のコードを生成します。

生成

移行の作成中に、本と件名および複数形に小文字を使用していることに注意してください。 これは、移行を作成するたびに従うべきRailsパラダイムです。

コードを編集する

アプリケーションのdb/migrateサブディレクトリに移動し、シンプルなテキストエディターを使用して各ファイルを1つずつ編集します。

次のように001_books.rbを変更します-

ID列は自動的に作成されるため、ここでも実行しないでください。

class Books < ActiveRecord::Migration

   def self.up
      create_table :books do |t|
         t.column :title, :string, :limit => 32, :null => false
         t.column :price, :float
         t.column :subject_id, :integer
         t.column :description, :text
         t.column :created_at, :timestamp
      end
   end

   def self.down
      drop_table :books
   end
end

メソッド self.up は新しいバージョンに移行するときに使用され、 self.down は必要に応じて変更をロールバックするために使用されます。 現時点では、上記のスクリプトを使用して books テーブルを作成します。

次のように002_subjects.rbを変更します-

class Subjects < ActiveRecord::Migration
   def self.up

      create_table :subjects do |t|
         t.column :name, :string
      end

      Subject.create :name => "Physics"
      Subject.create :name => "Mathematics"
      Subject.create :name => "Chemistry"
      Subject.create :name => "Psychology"
      Subject.create :name => "Geography"
   end

   def self.down
      drop_table :subjects
   end
end

上記のスクリプトを使用して subjects テーブルを作成し、subjectsテーブルに5つのレコードを作成します。

移行を実行する

これで、必要な移行ファイルがすべて作成されました。 データベースに対してそれらを実行する時が来ました。 これを行うには、コマンドプロンプトに移動し、アプリケーションが配置されているライブラリディレクトリに移動して、次のように rake migrate と入力します-

library> rake db:migrate

これにより、存在しない場合は「schema_info」テーブルが作成され、データベースの現在のバージョンが追跡されます。新しい移行はそれぞれ新しいバージョンになり、データベースが現在のバージョンになるまで新しい移行が実行されます。

*Rake* は、データベース構造の更新などの複雑なタスクの実行を簡素化するために、Railsが利用するUnix _make_プログラムに類似したRubyビルドプログラムです。

本番データベースとテストデータベースの移行の実行

移行に使用するRails環境を指定する場合は、RAILS_ENVシェル変数を使用します。

たとえば-

library> export RAILS_ENV = production
library> rake db:migrate
library> export RAILS_ENV = test
library> rake db:migrate
library> export RAILS_ENV = development
library> rake db:migrate

-Windowsでは、_export_コマンドの代わりに「set RAILS_ENV = production」を使用します。

次は何ですか?

これで、データベースと必要なテーブルが利用可能になりました。 後続の2つの章では、コントローラー(ActionController)およびビュー(ActionView)と呼ばれる2つの重要なコンポーネントについて説明します。

  • コントローラーの作成(アクションコントローラー)。
  • ビューの作成(アクションビュー)。

Ruby on Rails-コントローラー

Railsコントローラーは、アプリケーションの論理的な中心です。 ユーザー、ビュー、モデル間の相互作用を調整します。 コントローラーは、多くの重要な補助サービスのホームでもあります。

  • 外部リクエストを内部アクションにルーティングする責任があります。 人に優しいURLを非常にうまく処理します。
  • キャッシュを管理します。これにより、アプリケーションのパフォーマンスが大幅に向上します。
  • ヘルパーモジュールを管理します。ヘルパーモジュールは、コードを増やさずにビューテンプレートの機能を拡張します。
  • セッションを管理し、ユーザーにアプリケーションとの継続的な対話の印象を与えます。

コントローラーを作成するプロセスは非常に簡単で、モデルの作成にすでに使用したプロセスに似ています。 ここでコントローラーを1つだけ作成します-

library\> rails generate controller Book

Bookを大文字にし、単数形を使用していることに注意してください。 これは、コントローラーを作成するたびに従うべきRailsパラダイムです。

このコマンドはいくつかのタスクを実行しますが、ここでは以下が関連しています-

  • app/controllers/book_controller.rb というファイルを作成します

あなたがbook_controller.rbを見れば、あなたは次のようにそれを見つけるでしょう-

class BookController < ApplicationController
end

コントローラークラスは、_applicationController、_を継承します。これは、コントローラーフォルダー内の他のファイルである application.rb です。

_ApplicationController_には、すべてのコントローラーで実行できるコードが含まれており、Rails _ActionController
Base_クラスを継承しています。

_ApplicationController_を心配する必要はまだないので、 book_controller.rb にいくつかのメソッドスタブを定義してみましょう。 要件に基づいて、このファイルに任意の数の関数を定義できます。

ファイルを次のように変更し、変更を保存します。 これらのメソッドに付ける名前はあなた次第ですが、関連する名前を付ける方が良いことに注意してください。

class BookController < ApplicationController
   def list
   end

   def show
   end

   def new
   end

   def create
   end

   def edit
   end

   def update
   end

   def delete
   end

end

次に、すべてのメソッドを1つずつ実装します。

listメソッドの実装

listメソッドは、データベース内のすべての書籍のリストを提供します。 この機能は、次のコード行によって実現されます。 book_controller.rbファイルの次の行を編集します。

def list
   @books = Book.all
end

listメソッドの_ @ books = Book.all_行は、Railsにbooksテーブルを検索し、見つかった各行を@booksインスタンスオブジェクトに格納するよう指示します。

showメソッドの実装

showメソッドは、単一のブックの詳細のみを表示します。 この機能は、次のコード行によって実現されます。

def show
   @book = Book.find(params[:id])
end

showメソッドの_ @ book = Book.find(params [:id])_行は、params [:id]で定義されたidを持つ本のみを検索するようにRailsに指示します。

paramsオブジェクトは、メソッド呼び出し間で値を渡すことができるコンテナです。 たとえば、listメソッドによって呼び出されるページにいるとき、特定の本のリンクをクリックすると、paramsオブジェクトを介してその本のIDが渡され、showが特定の本を見つけることができます。

新しいメソッドの実装

新しいメソッドは、新しいオブジェクトを作成することをRailsに知らせます。 したがって、このメソッドに次のコードを追加するだけです。

def new
   @book = Book.new
   @subjects = Subject.all
end

ユーザーにページを表示してユーザー入力を取得するときに、上記のメソッドが呼び出されます。 ここで、2行目はデータベースからすべてのサブジェクトを取得し、@ subjectsと呼ばれる配列に入れます。

createメソッドの実装

HTMLフォームを使用してユーザー入力を取得したら、データベースにレコードを作成します。 これを実現するには、book_controller.rbのcreateメソッドを編集して、次のものに一致させます-

def create
   @book = Book.new(book_params)

   if @book.save
      redirect_to :action => 'list'
   else
      @subjects = Subject.all
      render :action => 'new'
   end

end

def book_params
   params.require(:books).permit(:title, :price, :subject_id, :description)
end

最初の行は、ユーザーが送信したデータから作成されたBookオブジェクトを保持する@bookという新しいインスタンス変数を作成します。 book_params メソッドは、オブジェクト*:books *からすべてのフィールドを収集するために使用されます。 データは、paramsオブジェクトを使用して作成する新しいメソッドから渡されました。

次の行は、オブジェクトがデータベースに正しく保存された場合にユーザーを list メソッドにリダイレクトする条件ステートメントです。 保存されない場合、ユーザーは新しいメソッドに戻されます。 redirect_toメソッドは、Webページでメタリフレッシュを実行するのに似ています。ユーザーの操作なしで自動的に目的地に転送します。

その後、データを正常に保存できず、新しいオプションの場合と同様の場合に、_ @ subjects = Subject.all_が必要です。

editメソッドの実装

editメソッドは、showメソッドとほとんど同じように見えます。 両方のメソッドを使用して、そのIDに基づいて単一のオブジェクトを取得し、ページに表示します。 唯一の違いは、showメソッドは編集できないことです。

def edit
   @book = Book.find(params[:id])
   @subjects = Subject.all
end

このメソッドは、ユーザーが変更するデータを画面に表示するために呼び出されます。 2行目は、データベースからすべてのサブジェクトを取得し、@ subjectsという配列に入れます。

updateメソッドの実装

このメソッドは、ユーザーがデータを変更し、変更をデータベースに更新したいときに、editメソッドの後に呼び出されます。 更新方法は作成方法に似ており、データベース内の既存の本を更新するために使用されます。

def update
   @book = Book.find(params[:id])

   if @book.update_attributes(book_param)
      redirect_to :action => 'show', :id => @book
   else
      @subjects = Subject.all
      render :action => 'edit'
   end

end

def book_param
   params.require(:book).permit(:title, :price, :subject_id, :description)
end

update_attributesメソッドは、createで使用されるsaveメソッドに似ていますが、データベースに新しい行を作成する代わりに、既存の行の属性を上書きします。

その後、データが正常に保存されない場合に_ @ subjects = Subject.all_行が必要になり、編集オプションに似たものになります。

deleteメソッドの実装

データベースからレコードを削除する場合は、このメソッドを使用します。 このメソッドを次のように実装します。

def delete
   Book.find(params[:id]).destroy
   redirect_to :action => 'list'
end

最初の行は、paramsオブジェクトを介して渡されたパラメーターに基づいて分類を検索し、destroyメソッドを使用して削除します。 2行目は、redirect_to呼び出しを使用してユーザーをリストメソッドにリダイレクトします。

件名を表示する追加の方法

特定の主題に基づいてすべての本を閲覧するための機能をユーザーに提供するとします。 したがって、book_controller.rb内にメソッドを作成して、すべてのサブジェクトを表示できます。 メソッド名は show_subjects であると仮定します-

def show_subjects
   @subject = Subject.find(params[:id])
end

最後に、 book_controller.rb ファイルは次のようになります-

class BooksController < ApplicationController

   def list
      @books = Book.all
   end

   def show
      @book = Book.find(params[:id])
   end

   def new
      @book = Book.new
      @subjects = Subject.all
   end

   def book_params
      params.require(:books).permit(:title, :price, :subject_id, :description)
   end

   def create
      @book = Book.new(book_params)

      if @book.save
         redirect_to :action => 'list'
      else
         @subjects = Subject.all
         render :action => 'new'
      end
   end

   def edit
      @book = Book.find(params[:id])
      @subjects = Subject.all
   end

   def book_param
      params.require(:book).permit(:title, :price, :subject_id, :description)
   end

   def update
      @book = Book.find(params[:id])

      if @book.update_attributes(book_param)
         redirect_to :action => 'show', :id => @book
      else
         @subjects = Subject.all
         render :action => 'edit'
      end
   end

   def delete
      Book.find(params[:id]).destroy
      redirect_to :action => 'list'
   end

   def show_subjects
      @subject = Subject.find(params[:id])
   end

end

ここで、コントローラーファイルを保存します。

次は何ですか?

バックエンドで機能するほとんどすべてのメソッドを作成しました。 次に、アクションのルート(URL)を定義します。

Ruby on Rails-ルート

ルーティングモジュールは、ネイティブRubyでURL書き換えを提供します。 これは、着信要求をコントローラーとアクションにリダイレクトする方法です。 mod_rewriteルールを置き換えます。 何よりも、RailsのルーティングはどのWebサーバーでも動作します。 ルートはapp/config/routes.rbで定義されています。

ルートを作成することは、リクエストのマップを描くことと考えてください。 マップは、いくつかの事前定義されたパターンに基づいてどこに行くべきかを伝えます-

Rails.application.routes.draw do
   Pattern 1 tells some request to go to one place
   Pattern 2 tell them to go to another
   ...
end

ライブラリ管理アプリケーションにBookControllerというコントローラーが含まれていると考えてみましょう。 BookControllerクラスのメソッドとして定義されているアクションのルートを定義する必要があります。

library/config/ディレクトリのroutes.rbファイルを開き、次の内容で編集します。

Rails.application.routes.draw do
   get 'book/list'
   get 'book/new'
   post 'book/create'
   patch 'book/update'
   get 'book/list'
   get 'book/show'
   get 'book/edit'
   get 'book/delete'
   get 'book/update'
   get 'book/show_subjects'
end

routes.rbファイルは、アプリケーションで使用可能なアクションと、get、post、patchなどのアクションのタイプを定義します。

次のコマンドを使用して、定義済みのすべてのルートをリストします。これは、アプリケーションのルーティングの問題を追跡したり、使い慣れたアプリケーションのURLの概要を把握するのに役立ちます。

library> rake routes

次は何ですか?

次に、データを表示し、ユーザーから入力を受け取るための画面を生成するコードを作成します。

Ruby on Rails-ビュー

Railsビューは、相互にアクセス可能な変数を通じてコン​​トローラーとデータを共有するERbプログラムです。

ライブラリアプリケーションのapp/viewsディレクトリを見ると、作成したコントローラーごとに1つのサブディレクトリが表示されます:book。 これらの各サブディレクトリは、同じ名前のコントローラーが生成スクリプトで作成されたときに自動的に作成されました。

Railsは、新しいメソッドごとにビューファイルを作成する必要があることを知らせます。 コントローラーで定義する各メソッドには、メソッドが収集しているデータを表示するために、メソッドと同じ名前の対応する erb ファイルが必要です。

それでは、book_controller.rbで定義したすべてのメソッドのビューファイルを作成しましょう。 これらのビューの実行中に、これらのアクションがデータベースに適用可能かどうかを同時に確認します。

listメソッドのビューファイルの作成

お好みのテキストエディターを使用して listl.erb というファイルを作成し、app/views/bookに保存します。 ファイルを作成して保存したら、Webブラウザーを更新します。 空白のページが表示されるはずです。そうでない場合は、ファイルのスペルをチェックし、コントローラーのメソッドとまったく同じであることを確認してください。

次に、実際のコンテンツを表示します。 以下のコードをlistl.erbに入れましょう。

<% if @books.blank? %>
<p>There are not any books currently in the system.</p>
<% else %>
<p>These are the current books in our system</p>

<ul id = "books">
   <% @books.each do |c| %>
   <li><%= link_to c.title, {:action => 'show', :id => c.id} -%></li>
   <% end %>
</ul>

<% end %>
<p><%= link_to "Add new Book", {:action => 'new' }%></p>

実行されるコードは、@ books配列にオブジェクトが含まれているかどうかを確認することです。 * .blank?*メソッドは、配列が空の場合はtrueを返し、オブジェクトが含まれている場合はfalseを返します。 この@booksオブジェクトは、listメソッド内のコントローラーで作成されました。

<%=%>タグ間のコードは link_to メソッド呼び出しです。 link_toの最初のパラメーターは、<a>タグの間に表示されるテキストです。 2番目のパラメーターは、リンクがクリックされたときに呼び出されるアクションです。 この場合、それはshowメソッドです。 最後のパラメーターは、paramsオブジェクトを介して渡されるブックのIDです。

今、ブラウザを更新してみてください。ライブラリに本がないので、次の画面が表示されます。

ブックメッセージなし

新しいメソッドのビューファイルの作成

今まで、図書館には本がありません。 システムにいくつかの本を作成する必要があります。 したがって、book_controller.rbで定義されている new メソッドに対応するビューを設計しましょう。

お気に入りのテキストエディターを使用してnewl.erbというファイルを作成し、app/views/bookに保存します。 次のコードをnewl.erbファイルに追加します。

<h1>Add new book</h1>

<%= form_tag :action => 'create' do %>
<p><label for = "book_title">Title</label>:

<%= text_field 'books', 'title' %></p>
<p><label for = "book_price">Price</label>:

<%= text_field 'books', 'price' %></p>
<p><label for = "book_subject_id">Subject</label>:

<%= collection_select(:books, :subject_id, @subjects, :id, :name, prompt: true) %></p>
<p><label for = "book_description">Description</label><br/>

<%= text_area 'books', 'description' %></p>
<%= submit_tag "Create" %>

<% end -%>
<%= link_to 'Back', {:action => 'list'} %>

ここで、 form_tag メソッドは、提供されたすべての情報を使用して、Rubyコードを通常のHTML <form>タグに解釈します。 このタグは、たとえば、次のHTMLを出力します-

<form action = "/book/create" method = "post">

次のメソッドは text_field で、<input>テキストフィールドを出力します。 text_fieldのパラメーターは、オブジェクトとフィールド名です。 この場合、オブジェクトは_book_で、名前は_title_です。

*collection_select* と呼ばれるRailsメソッドは、@ booksなどの配列から構築されたHTML選択メニューを作成します。 次のような5つのパラメータがあります-
  • *:book *-操作しているオブジェクト。 この場合、それは本オブジェクトです。
  • *:subject_id *-ブックの保存時に入力されるフィールド。
  • @ books -使用しているアレイ。
  • *:id *-データベースに保存されている値。 HTMLの観点では、これは<option>タグの値パラメーターです。
  • *:name *-プルダウンメニューにユーザーに表示される出力。 これは、<option>タグ間の値です。

次に使用されるのは submit_tag で、フォームを送信する<input>ボタンを出力します。 最後に、単に</form>に変換する end メソッドがあります。

ブラウザにアクセスして、* http://localhost:3000/book/new。*にアクセスします。これにより、次の画面が表示されます。

新しい本

このフォームにデータを入力し、[作成]ボタンをクリックします。 ここで私はフィールドに次の詳細を追加しました-

Title: Advance Physics
Price: 390
Subject: Physics
Description: This is test to create new book
*Create* ボタンをクリックすると、 *create* メソッドが呼び出されます。このメソッドは *list* または *new* メソッドを使用して結果を表示するため、ビューは不要です。 したがって、[作成]ボタンをクリックすると、データが正常に送信され、リストページにリダイレクトされます。ここで、次のように1つのアイテムがリストされます。

ブックの作成

リンクをクリックすると、まだshowメソッドのテンプレートファイルを作成していないため、別のテンプレートが見つからないというエラーが表示されます。

showメソッドのビューファイルの作成

このメソッドは、ライブラリで利用可能な本に関する完全な詳細を表示します。 app/views/bookの下にshowl.erbファイルを作成し、次のコードを入力します-

<h1><%= @book.title %></h1>

<p>
   <strong>Price: </strong> $<%= @book.price %><br/>
   <strong>Subject :</strong> <%= @book.subject.name %><br/>
   <strong>Created Date:</strong> <%= @book.created_at %><br/>
</p>

<p><%= @book.description %></p>

<hr/>

<%= link_to 'Back', {:action => 'list'} %>

関連付けを最大限に活用し、関連オブジェクトからデータを簡単にプルできるようにするのは初めてです。

使用される形式は*@variable.relatedObject.column*です。 この場合、 belongs_to アソシエーションを使用して、@ book変数を通じてサブジェクトの名前の値を取得できます。 リストされたレコードをクリックすると、次の画面が表示されます。

ショーブック

editメソッド用のビューファイルの作成

editl.erbという新しいファイルを作成し、app/views/bookに保存します。 次のコードでそれを埋めます-

<h1>Edit Book Detail</h1>

<%= form_for @book, :url =>{:action => "update", :id =>@book} do |f| %>

<p>Title: <%= f.text_field 'title' %></p>
<p>Price: <%= f.text_field  'price' %></p>
<p>Subject: <%= f.collection_select :subject_id, Subject.all, :id, :name %></p>
<p>Description<br/>

<%= f.text_area 'description' %></p>
<%= f.submit "Save changes" %>
<% end %>

<%= link_to 'Back', {:action => 'list' } %>

このコードは、idを作成および定義する代わりに更新するアクションを除いて、 new メソッドに非常に似ています。

このシナリオでは、フォームアクションに form_for タグを使用しました。 form_tag よりもパフォーマンスが向上します。 なぜそれはモデルとの相互作用を簡単に作成するからです。 そのため、モデルとフォームフィールド間の相互作用が必要な場合は、form_forタグを使用することをお勧めします。

この時点で、* listメソッドの*ビューファイルを変更する必要があります。 <li> </li>要素に移動し、次のように変更します-

<li>
   <%= link_to c.title, {:action => "show", :id => c.id} -%>
   <b> <%= link_to 'Edit', {:action => "edit",
   :id => c.id} %></b>
</li>

ここで、* http://localhost:3000/book/list。を使用して本を閲覧してみてください。 *Edit オプションとともにすべての本のリストが表示されます。 [編集]オプションをクリックすると、次の画面が表示されます-

ブックの編集

ここで、この情報を編集し、[変更を保存]ボタンをクリックします。 これにより、コントローラーファイルで使用可能な update メソッドが呼び出され、変更されたすべての属性が更新されます。 update メソッドは、 show または edit メソッドを使用して結果を表示するため、ビューファイルは必要ありません。

deleteメソッドのビューファイルの作成

Ruby on Railsを使用してデータベースから情報を削除するのはほとんど簡単です。 このメソッドは結果を表示するために list メソッドを使用しているため、deleteメソッドのビューコードを記述する必要はありません。 では、listl.erbをもう一度変更して、削除リンクを追加しましょう。

<li> </li>要素に移動し、次のように変更します-

<li>
   <%= link_to c.title, {:action => 'show', :id => c.id} -%>
   <b> <%= link_to 'Edit', {:action => 'edit', :id => c.id} %></b>
   <b> <%= link_to "Delete", {:action => 'delete', :id => c.id},
   :confirm => "Are you sure you want to delete this item?" %></b>
</li>
  • :confirm *パラメーターは、本当にアクションを実行するかどうかを尋ねるJavaScript確認ボックスを表示します。 ユーザーが[OK]をクリックすると、アクションが進行し、アイテムが削除されます。

今、* http://localhost:3000/book/list。を使用して書籍を閲覧してみてください。次のように、 *Edit および Delete オプションとともにすべての書籍のリストが表示されます-

ブックの削除

[削除]オプションを使用して、リストされたレコードを削除できます。

show_subjectsメソッドのビューファイルの作成

app/views/bookディレクトリに新しいファイルshow_subjectsl.erbを作成し、それに次のコードを追加します-

<h1><%= @subject.name -%></h1>

<ul>
   <% @subject.books.each do |c| %>
   <li><%= link_to c.title, :action => "show", :id => c.id -%></li>
   <% end %>
</ul>

単一の主題の多数の書籍リストを反復処理することにより、関連付けを利用しています。

ここで、showl.erbのSubject:行を変更して、件名リストにリンクが表示されるようにします。

<strong>Subject: </strong> <%= link_to @book.subject.name,
:action => "show_subjects", :id => @book.subject.id %><br/>

これにより、インデックスページに件名のリストが出力され、ユーザーはそれらに直接アクセスできます。

*listl.erb* を変更して、以下をファイルの先頭に追加します-
<ul id = "subjects">
   <% Subject.find(:all).each do |c| %>
   <li><%= link_to c.name, :action => "show_subjects", :id => c.id %></li>
   <% end %>
</ul>

次に、http://localhost:3000/book/listを使用して本を閲覧してみてください。 すべてのサブジェクトにリンクが表示されるため、そのサブジェクトに関連するすべての書籍を閲覧できます。

リスト対象

次は何ですか?

Railsのすべての操作に慣れていることを願っています。

次の章では、 Layouts を使用してデータをより良い方法で配置する方法について説明します。 RailsアプリケーションでCSSを使用する方法を示します。

Ruby on Rails-レイアウト

レイアウトは、HTMLページの周囲を定義します。 これは、最終出力の一般的なルックアンドフィールを定義する場所です。 レイアウトファイルはapp/views/layoutsにあります。

このプロセスでは、レイアウトテンプレートを定義してから、コントローラーにテンプレートが存在することを知らせて使用します。 まず、テンプレートを作成しましょう。

standardl.erbという新しいファイルをapp/views/layoutsに追加します。 ファイル名で使用するテンプレートをコントローラーに知らせるため、同じ命名規則に従うことをお勧めします。

次のコードを新しいstandardl.erbファイルに追加し、変更を保存します-

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">

   <head>
      <meta http-equiv = "Content-Type" content = "text/html; charset = iso-8859-1"/>
      <meta http-equiv = "Content-Language" content = "en-us"/>
      <title>Library Info System</title>
      <%= stylesheet_link_tag "style" %>
   </head>

   <body id = "library">
      <div id = "container">

         <div id = "header">
            <h1>Library Info System</h1>
            <h3>Library powered by Ruby on Rails</h3>
         </div>

         <div id = "content">
            <%= yield -%>
         </div>

         <div id = "sidebar"></div>

      </div>
   </body>

</html>

追加したものはすべて、2行を除く標準のHTML要素でした。 stylesheet_link_tag ヘルパーメソッドは、スタイルシート<link>を出力します。 この例では、style.cssスタイルシートをリンクしています。 yield コマンドは、ここで呼び出されたメソッドにhtml.erbを配置する必要があることをRailsに知らせます。

book_controller.rb を開き、最初の行のすぐ下に次の行を追加します-

class BookController < ApplicationController
layout 'standard'
def list
@books = Book.all
end
...................

これは、standardl.erbファイルで使用可能なレイアウトを使用することをコントローラーに指示します。 次に、次の画面を生成する本をブラウズしてみてください。

レイアウトの例

スタイルシートの追加

これまで、スタイルシートを作成していないため、Railsはデフォルトのスタイルシートを使用しています。 ここで、style.cssという新しいファイルを作成し、/public/stylesheetsに保存しましょう。 このファイルに次のコードを追加します。

body {
   font-family: Helvetica, Geneva, Arial, sans-serif;
   font-size: small;
   font-color: #000;
   background-color: #fff;
}

a:link, a:active, a:visited {
   color: #CD0000;
}

input {
   margin-bottom: 5px;
}

p {
   line-height: 150%;
}

div#container {
   width: 760px;
   margin: 0 auto;
}

div#header {
   text-align: center;
   padding-bottom: 15px;
}

div#content {
   float: left;
   width: 450px;
   padding: 10px;
}

div#content h3 {
   margin-top: 15px;
}

ul#books {
   list-style-type: none;
}

ul#books li {
   line-height: 140%;
}

div#sidebar {
   width: 200px;
   margin-left: 480px;
}

ul#subjects {
   width: 700px;
   text-align: center;
   padding: 5px;
   background-color: #ececec;
   border: 1px solid #ccc;
   margin-bottom: 20px;
}

ul#subjects li {
   display: inline;
   padding-left: 5px;
}

ブラウザを更新して、違いを確認してください-

レイアウトの例

次は何ですか?

次の章では、Rails Scaffoldingを使用してアプリケーションを開発し、任意のデータベースのレコードを追加、削除、および変更するためのユーザーアクセスをユーザーに提供する方法について説明します。

Ruby on Rails-足場

Railsアプリケーション、特にデータベース内のデータへのシンプルなインターフェイスを主に提供しているアプリケーションを開発している場合、scaffoldメソッドを使用すると便利な場合があります。

足場は、安価なデモスリル以上のものを提供します。 ここにいくつかの利点があります-

  • フィードバックのために、ユーザーの前でコードをすばやく取得できます。
  • あなたはより速い成功によって動機づけられます。
  • 生成されたコードを見ると、Railsの仕組みを学ぶことができます。
  • 足場を基盤として使用して、開発をすぐに開始できます。

足場の例

_scaffoldingを理解するために、 cookbook というデータベースと recipes というテーブルを作成してみましょう。

空のRails Webアプリケーションを作成する

コマンドウィンドウを開き、この cookbook Webアプリケーションを作成する場所に移動します。 そのため、次のコマンドを実行して完全なディレクトリ構造を作成します。

tp> rails new cookbook

データベースのセットアップ

データベースを作成する方法は次のとおりです-

mysql> create database cookbook;
Query OK, 1 row affected (0.01 sec)

mysql> grant all privileges on cookbook.*
to 'root'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Railsにデータベースの検索方法を指示するには、設定ファイルcookbook \ config \ database.ymlを編集し、データベース名をcookbookに変更します。 パスワードは空のままにします。 終了したら、次のようになります-

development:
   adapter: mysql
   database: cookbook
   username: root
   password: [password]
   host: localhost

test:
   adapter: mysql
   database: cookbook
   username: root
   password: [password]
   host: localhost

production:
   adapter: mysql
   database: cookbook
   username: root
   password: [password]
   host: localhost

Railsでは、異なるデータベースを使用して、開発モード、テストモード、または運用モードで実行できます。 このアプリケーションは、それぞれに同じデータベースを使用します。

生成された足場コード

scaffoldアクションにより、Railsは必要なすべてのコードを動的に生成します。 _scaffold_をスクリプトとして実行することにより、すべてのコードをディスクに書き込むことができ、そこでコードを調査して、要件に合わせて調整を開始できます。

それでは、足場ヘルパースクリプトを使用して、足場コードを手動で生成します。

cookbook> rails generate scaffold recipe

以下に示すように自動ファイルを生成します-

スキャフォールド

コントローラー

コントローラーの背後にあるコードを見てみましょう。 このコードは、 scaffold ジェネレーターによって生成されます。 app/controllers/recipes_controller.rbを開くと、次のようなものが見つかります-

class RecipesController < ApplicationController
   before_action :set_recipe, only: [:show, :edit, :update, :destroy]

   # GET/recipes
   # GET/recipes.json
   def index
      @recipes = Recipe.all
   end

   # GET/recipes/1
   # GET/recipes/1.json
   def show
   end

   # GET/recipes/new
   def new
      @recipe = Recipe.new
   end

   # GET/recipes/1/edit
   def edit
   end

   # POST/recipes
   # POST/recipes.json
   def create
      @recipe = Recipe.new(recipe_params)

      respond_to do |format|
         if @recipe.save
            formatl { redirect_to @recipe, notice: 'Recipe was successfully created.' }
            format.json { render :show, status: :created, location: @recipe }
         else
            formatl { render :new }
            format.json { render json: @recipe.errors, status: :unprocessable_entity }
         end
      end

   end

   # PATCH/PUT/recipes/1
   # PATCH/PUT/recipes/1.json
   def update
      respond_to do |format|
         if @recipe.update(recipe_params)
            formatl { redirect_to @recipe, notice: 'Recipe was successfully updated.' }
            format.json { render :show, status: :ok, location: @recipe }
         else
            formatl { render :edit }
            format.json { render json: @recipe.errors, status: :unprocessable_entity }
         end
      end

   end

   # DELETE/recipes/1
   # DELETE/recipes/1.json
   def destroy
      @recipe.destroy
         respond_to do |format|
         formatl { redirect_to recipes_url, notice: 'Recipe was successfully destroyed.' }
         format.json { head :no_content }
      end
   end

   private

   # Use callbacks to share common setup or constraints between actions.
   def set_recipe
      @recipe = Recipe.find(params[:id])
   end

   # Never trust parameters from the scary internet, only allow the white list through.
   def recipe_params
      params.require(:recipe).permit(:tittle, :instructions)
   end
end

Railsアプリケーションのユーザーがアクションを選択するとき、例えば 「表示」-コントローラは適切なセクションのコードを実行します-「def show」-そしてデフォルトで同じ名前のテンプレートを表示します-「showl.erb」。 このデフォルトの動作は上書きできます。

コントローラーは、_find、find_all、new、save、update_attributes、destroy_などのActiveRecordメソッドを使用して、データベーステーブルとの間でデータを移動します。 SQLステートメントを記述する必要はありません。railsが自動的にそれを処理します。

この1行のコードにより、データベーステーブルが活性化されます。 それはあなたのデータへのシンプルなインターフェース、および方法を提供します-

  • 新しいエントリを作成する
  • 現在のエントリを編集する
  • 現在のエントリを表示する
  • 現在のエントリを破棄する

エントリを作成または編集するとき、scaffoldはフォームの生成や処理などのすべてのハードワークを行い、次のタイプの入力をサポートする巧妙なフォーム生成を提供します。

  • 単純なテキスト文字列
  • テキスト領域(またはテキストの大きなブロック)
  • 日付セレクター
  • 日時セレクター

Rails Migrationsを使用して、テーブルを作成および管理できます。

rake db:migrate RAILS_ENV=development

今、クックブックディレクトリに移動し、次のコマンドを使用してWebサーバーを実行します-

cookbook> rails server

ここで、ブラウザを開いてhttp://127.0.0.1:3000/recipe/newに移動します。 これにより、レシピテーブルに新しいエントリを作成する画面が表示されます。 スクリーンショットを以下に示します-

レシピの作成

あなたが*作成*ボタンを押して新しいレシピを作成すると、あなたの記録がレシピ表に追加され、次の結果が表示されます-

レシピを作成

レコードを編集、表示、および破棄するオプションが表示されます。 したがって、これらのオプションを試してみてください。

また、URL [[1]]

モデルの強化

Railsは、多くのエラー処理を無料で提供します。 これを理解するには、空のレシピモデルにいくつかの検証ルールを追加します-

次のようにapp/models/recipe.rbを変更してから、アプリケーションをテストします-

class Recipe < ActiveRecord::Base
   validates_length_of :title, :within => 1..20
   validates_uniqueness_of :title, :message => "already exists"
end

これらのエントリは自動チェックを提供します。

  • validates_length_of -フィールドは空白ではなく、長すぎません。
  • validates_uniqueness_of -重複した値がトラップされます。 デフォルトのRailsエラーメッセージの代わりに、ここでカスタムメッセージを指定しました。

足場を作成する別の方法

上記のアプリケーションを作成し、*生成された足場コード*を以下のように作成します

rails g scaffold Recipe tittle:string instructions:text

上記のコードは、画像の下に示すように、タイトルと指示列を含むsqlite3を使用して、データベース付きの自動ファイルを生成します。

スキャフォールド

以下の構文を使用してデータベースを移行する必要があります。

$ rake db:migrate RAILS_ENV=development

最後に、次のコマンドラインを使用してアプリケーションを実行します-

rails server

上記の出力画像のように結果が生成されます。

ビュー

すべてのビューと対応するすべてのコントローラーメソッドは、 scaffold コマンドによって作成され、app/views/recipesディレクトリで使用できます。

足場の違いは何ですか?

前の章を読んだことがあれば、データのリスト、表示、削除、作成などのメソッドを作成したことを確認しておく必要がありますが、scaffoldingはその仕事を自動的に行います。

Ruby on Rails-AJAX

Ajaxは* A synchronous J * avaScriptおよび* 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コントローラーアクション)-データを処理し、WebクライアントにHTMLフラグメントを返します。
  • クライアントは応答を受け取ります-Railsが自動的に作成するクライアント側のJavaScriptは、HTMLフラグメントを受け取り、それを使用して現在のページのHTMLの指定された部分、多くの場合<div>タグのコンテンツを更新します。

これらの手順はRailsアプリケーションでAjaxを使用する最も簡単な方法ですが、少し余分な作業を行うことで、サーバーにAjaxリクエストへの応答としてあらゆる種類のデータを返させることができます。関与する相互作用。

AJAXの例

この例はscaffoldに基づいて機能し、Destroyコンセプトはajaxに基づいて機能します。

この例では、ポニーテーブルの操作を提供、一覧表示、表示、および作成します。 scaffoldテクノロジーを理解していない場合は、まず前の章を読んでから、AJAX on Railsに進むことをお勧めします。

アプリケーションを作成する

私たちはアプリケーションの作成から始めましょうそれは次のように行われます-

rails new ponies

上記のコマンドはアプリケーションを作成します。今度はcdコマンドを使用してappディレクトリを呼び出す必要があります。 アプリケーションのディレクトリに入り、scaffoldコマンドを呼び出す必要があります。 それは次のように行われます-

rails generate scaffold Pony name:string profession:string

上記のコマンドは、名前と職業列を持つ足場を生成します。 次のコマンドでデータベースを移行する必要があります

rake db:migrate

次のコマンドでRailsアプリケーションを実行します

rails s

Webブラウザを開き、URLをhttp://localhost:3000/ponies/newとして呼び出します。出力は次のようになります

Ajax

Ajaxを作成する

適切なテキストエディターでapp/views/ponies/indexl.erbを開きます。 :remote ⇒ true、:class ⇒ 'delete_pony’で破棄行を更新します。最後に、次のようになります。

Ajax

destroy.js.erbというファイルを作成し、他の.erbファイルの隣に配置します(app/views/poniesの下)。 それはこのように見えるはずです-

Ajax

次に、destroy.js.erbに以下に示すコードを入力します

$('.delete_pony').bind('ajax:success', function() {
   $(this).closest('tr').fadeOut();
});

今app/controllers/ponies_controller.rbに配置されているコントローラファイルを開き、以下に示すようにdestroyメソッドに次のコードを追加します-

# DELETE/ponies/1
# DELETE/ponies/1.json
def destroy
   @pony = Pony.find(params[:id])
   @pony.destroy

   respond_to do |format|
      formatl { redirect_to ponies_url }
      format.json { head :no_content }
      format.js   { render :layout => false }
   end

end

最後にコントローラーページは図のようになります。

Ajax

ここで、http://localhost:3000/ponies/newから呼び出されるアプリケーションの出力を実行すると、次の画像のようになります。

Ajax

ポニー作成ボタンを押すと、次のように結果が生成されます

Ajax

戻るボタンをクリックすると、ポニーが作成したすべての情報が画像として表示されます

Ajax

これまでは、scaffoldに取り組んでおり、destroyボタンをクリックすると、下の画像に示すようにポップアップが呼び出されます。ポップアップはAjaxに基づいて機能します。

Ajax

[OK]ボタンをクリックすると、ポニーからレコードが削除されます。 ここで[OK]ボタンをクリックしました。 最終的な出力は次のようになります-

Ajax

Ruby on Rails-ファイルのアップロード

サイト訪問者がサーバーにファイルをアップロードする必要がある場合があります。 Railsでは、この要件を非常に簡単に処理できます。 次に、シンプルで小さなRailsプロジェクトを進めます。

いつものように、 testfile という新しいRailsアプリケーションから始めましょう。 単純なrailsコマンドを使用して、アプリケーションの基本構造を作成しましょう。

tp> rails new testfile

アプリケーション開発を開始する前に、以下に示すようにgemファイルをインストールする必要があります-

gem install carrierwave
gem install bootstrap-sass

あなたのgemfileを開き、次の図に示すように、下部に次の2つのgemを追加します-

GEM

gemファイルにgemを追加した後、コンソールで次のコマンドを実行する必要があります-

bundle install

モデルの作成

以下に示すように、名前と添付ファイルとして2つの文字列を持つモデルを作成する必要があります-

rails g model Resume name:string attachment:string

以下に示すように、データベースの移行を作成する必要があります-

rake db:migrate

次のようにコントローラーを生成する必要があります-

rails g controller Resumes index new create destroy

すばらしいです! これで、基本構造が設定されました。 次に、アップローダーを作成する必要があります。 Uploaderは、carrierwave gemから来て、carrierwaveにファイルの処理方法を指示します。 つまり、すべてのファイル処理機能が含まれていました。 以下に示すように、コマンドを実行してアップローダーを作成します

rails g uploader attachment

次に、履歴書モデルを開き、以下に示すようにアップローダーを呼び出します。 再開モデルはapp/models/resume.rbに配置されました-

class Resume < ActiveRecord::Base
   mount_uploader :attachment, AttachmentUploader # Tells rails to use this uploader for this model.
   validates :name, presence: true # Make sure the owner's name is present.
end

コントローラで作業する前に、以下に示すようにconfig/routes.dbを変更する必要があります-

CarrierWaveExample::Application.routes.draw do
   resources :resumes, only: [:index, :new, :create, :destroy]
   root "resumes#index"
end

以下に示すようにコントローラーを編集します。

class ResumesController < ApplicationController
   def index
      @resumes = Resume.all
   end

   def new
      @resume = Resume.new
   end

   def create
      @resume = Resume.new(resume_params)

      if @resume.save
         redirect_to resumes_path, notice: "The resume #{@resume.name} has been uploaded."
      else
         render "new"
      end

   end

   def destroy
      @resume = Resume.find(params[:id])
      @resume.destroy
      redirect_to resumes_path, notice:  "The resume #{@resume.name} has been deleted."
   end

   private
      def resume_params
      params.require(:resume).permit(:name, :attachment)
   end

end

app/assets/stylesheets/resumes.css.scssにあるcss file.cssファイルにブートストラップ実装を追加しましょう

@import "bootstrap";

ここでapp/views/layouts/application.erbを開き、以下に示すようにコードを追加します-

<!DOCTYPE html>
<html>

   <head>
      <title>finddevguides</title>
      <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
      <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
      <%= csrf_meta_tags %>
   </head>

   <body>
      <div class = "container" style = "padding-top:20px;">
         <%= yield %>
      </div>
   </body>

</html>

次に、以下に示すようにインデックスビューを設定する必要があります-

<% if !flash[:notice].blank? %>
   <div class = "alert alert-info">
      <%= flash[:notice] %>
   </div>
<% end %>

<br/>

<%= link_to "New Resume", new_resume_path, class: "btn btn-primary" %>
<br/>
<br/>

<table class = "table table-bordered table-striped">
   <thead>.
      <tr>
         <th>Name</th>
         <th>Download Link</th>
         <th> </th>
      </tr>
   </thead>

   <tbody>
      <% @resumes.each do |resume| %>

         <tr>
            <td><%= resume.name %></td>
            <td><%= link_to "Download Resume", resume.attachment_url %></td>
            <td><%= button_to "Delete",  resume, method: :delete, class: "btn btn-danger", confirm: "Are you sure that you wish to delete #{resume.name}?" %></td>
         </tr>

      <% end %>
   </tbody>

</table>

では、newl.erbを編集してフォームコードを追加しましょう。

<% if [email protected]? %>
   <div class = "alert alert-error">

      <ul>
         <% @resume.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
         <% end %>
      </ul>

   </div>
<% end %>

<div class = "well">
   <%= form_for @resume, html: { multipart: true } do |f| %>
      <%= f.label :name %>
      <%= f.text_field :name %>
      <%= f.label :attachment %>
      <%= f.file_field :attachment %>
      <%= f.submit "Save", class: "btn btn-primary" %>
   <% end %>
</div>

サーバーを起動して、http://localhost:3000にアクセスします。 次のような画面が生成されます-

出力

最後に、許可されているファイルタイプのリストをフィルタリングする必要があります。 そのためには、以下に示すようにapp/uploaders/attachment_uploader.rbに簡単なコードを追加する必要があります

class AttachmentUploader < CarrierWave::Uploader::Base
   storage :file

   def store_dir
      "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
   end

   def extension_white_list
      %w(pdf doc htm html docx)
   end
end

サーバーを起動して、http://localhost:3000にアクセスします。 間違った形式を入力してください。以下に示すように、間違ったメッセージを生成します-

出力が間違っています

*File* オブジェクトの詳細については、* Rubyリファレンスマニュアル*をご覧ください。

Ruby on Rails-メールを送信

*Action Mailer* は、アプリケーションがメールを送受信できるようにするRailsコンポーネントです。 この章では、Railsを使用してメールを送信する方法を説明します。 次のコマンドを使用して*メール*プロジェクトの作成を始めましょう。
tp> rails new mailtest

これにより、続行するために必要なフレームワークが作成されます。 次に、ActionMailerの構成から始めます。

アクションメーラー-設定

以下は、実際の作業に進む前に設定を完了するために従う必要がある手順です-

emailsプロジェクトのconfigフォルダーに移動して、environment.rbファイルを開き、このファイルの下部に次の行を追加します。

config.action_mailer.delivery_method = :smtp

SMTPサーバーを使用することをActionMailerに伝えます。 Mac OS XやLinuxなどのUnixベースのオペレーティングシステムを使用している場合は、:sendmailに設定することもできます。

environment.rbの下部にも次のコード行を追加します。

config.action_mailer.smtp_settings = {
   address:              'smtp.gmail.com',
   port:                 587,
   domain:               'example.com',
   user_name:            '<username>',
   password:             '<password>',
   authentication:       'plain',
   enable_starttls_auto: true
}

各ハッシュ値を、Simple Mail Transfer Protocol(SMTP)サーバーの適切な設定に置き換えます。 わからない場合は、インターネットサービスプロバイダーからこの情報を取得できます。 標準のSMTPサーバーを使用している場合、ポート番号25と認証タイプを変更する必要はありません。

デフォルトの電子メールメッセージ形式を変更することもできます。 プレーンテキスト形式ではなくHTMLでメールを送信する場合は、config/environment.rbにも次の行を追加します-

ActionMailer::Base.default_content_type = "text/html"
ActionMailer
Base.default_content_typeは、「text/plain」、「text/html」、および「text/enriched」に設定できます。 デフォルト値は「text/plain」です。

次のステップは、メーラーを作成することです

メーラーを生成する

次のようにメーラーを生成するには、次のコマンドを使用します-

tp> cd emails
emails> rails generate mailer Usermailer

これにより、app \ mailerディレクトリにuser_mailer.rbファイルが作成されます。 次のようにこのファイルの内容を確認してください-

class Emailer < ActionMailer::Base
end

次のように1つのメソッドを作成しましょう-

class UserMailer < ApplicationMailer
   default from: '[email protected]'

   def welcome_email(user)
      @user = user
      @url  = 'http://www.gmail.com'
      mail(to: @user.email, subject: 'Welcome to My Awesome Site')
   end

end
  • デフォルトのハッシュ-これは、このメーラーから送信する電子メールのデフォルト値のハッシュです。 この場合、:fromヘッダーをこのクラスのすべてのメッセージの値に設定しています。 これはメールごとに上書きできます
  • mail -実際の電子メールメッセージ、:toおよび:subjectヘッダーを渡します。

app/views/user_mailer/にwelcome_emaill.erbというファイルを作成します。 これは、HTMLでフォーマットされた、電子メールに使用されるテンプレートになります-

<html>

   <head>
      <meta content = 'text/html; charset = UTF-8' http-equiv = 'Content-Type'/>
   </head>

   <body>
      <h1>Welcome to example.com, <%= @user.name %></h1>

      <p>
         You have successfully signed up to example.com,your username is:
         <%= @user.login %>.<br>
      </p>

      <p>
         To login to the site, just follow this link:
         <%= @url %>.
      </p>

      <p>Thanks for joining and have a great day!</p>

   </body>
</html>

次に、次のようにこのアプリケーションのテキスト部分を作成します-

Welcome to example.com, <%= @user.name %>
===============================================

You have successfully signed up to example.com,
your username is: <%= @user.login %>.

To login to the site, just follow this link: <%= @url %>.

Thanks for joining and have a great day!

メーラーの呼び出し

最初に、簡単なユーザーの足場を作成しましょう

$ bin/rails generate scaffold user name email login
$ bin/rake db:migrate

Action MailerはActive Jobとうまく統合されているため、リクエストとレスポンスのサイクル以外で電子メールを送信できるため、ユーザーは待つ必要がありません-

class UsersController < ApplicationController
   # POST/users
   # POST/users.json
   def create
   @user = User.new(params[:user])

      respond_to do |format|
         if @user.save
            # Tell the UserMailer to send a welcome email after save
            UserMailer.welcome_email(@user).deliver_later

            formatl { redirect_to(@user, notice: 'User was successfully created.') }
            format.json { render json: @user, status: :created, location: @user }
         else
            formatl { render action: 'new' }
            format.json { render json: @user.errors, status: :unprocessable_entity }
         end

      end

   end
end

次に、http://127.0.0.1:3000/users/newを使用してアプリケーションをテストします。 次の画面が表示され、この画面を使用して、誰にでもメッセージを送信できます。

メール送信

これはあなたのメッセージを送信し、次のようにテキストメッセージ「メッセージが正常に送信されました」と出力が表示されます-

sent mail to [email protected] (2023.Sms)
[ActiveJob] [ActionMailler::DeliveryJob] [2cfde3c-260e-4a33-1a6ada13a9b] Date: Thu, 09 Jul 2015 11:44:05 +0530
From: [email protected]
To: [email protected]
Message-Id: <[email protected]>
Subject: Welcome to My Awesome Site
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--mimepart_559e112d601c8_f1031e7f20233f5";
charset=UTF-8
Content-Transfer-Encoding:7bit

Railsを使用してメールを送信する方法の詳細については、http://en.wikibooks.org/wiki/Ruby_on_Rails/ActionMailer [ActionMailer]をご覧ください。