Ruby on Railsアプリケーションを構築する方法

前書き

Railsは、https://www.digitalocean.com/community/tags/ruby [Ruby]で記述されたWebアプリケーションフレームワークです。 共通の目標がある開発者にとっては、設定された規則が最も役立つと想定して、アプリケーション開発に対する意見のあるアプローチをとります。 そのため、Railsは、ルーティング、ステートフルデータ、資産管理などを処理するための規則を提供し、ほとんどのWebアプリケーションが必要とするベースライン機能を提供します。

Railsはhttps://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller[model-view-controller](MCV)アーキテクチャパターンに従います。これは、モデルにあるアプリケーションのロジックを分離します、アプリケーション情報のルーティングと表示から。 この組織構造-開発者がhttps://api.rubyonrails.org/classes/ActionController/Helpers.html[helpers]およびhttps://api.rubyonrails.org/classes/ActionView/にコードを抽出できるようにする他の規則とともにPartialRenderer.html [partials]-アプリケーションコードがhttps://en.wikipedia.org/wiki/Don%27t_repeat_yourself [不必要に繰り返される]にならないようにします。

このチュートリアルでは、ユーザーがサメとその行動に関する情報を投稿できるようにするRailsアプリケーションを構築します。 これは、将来のアプリケーション開発の良い出発点になります。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • Ubuntu 18.04を実行しているローカルマシンまたは開発サーバー。 開発マシンには、管理権限を持つ非ルートユーザーと、「+ ufw +」で設定されたファイアウォールが必要です。 これを設定する方法については、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 [Ubuntu 18.04での初期サーバー設定]チュートリアルを参照してください。

  • ローカルマシンまたは開発サーバーにインストールされているhttps://nodejs.org [Node.js]およびhttps://www.npmjs.com/[npm]。 このチュートリアルでは、Node.jsバージョンとnpmバージョンを使用します。 Node.jsおよびnpmをUbuntu 18.04にインストールする方法については、https://www.digitalocean.com/community/tutorials/how-to-install-node-js-の「PPAを使用してインストールする」セクションの手順に従ってくださいon-ubuntu-18-04#installing-using-a-ppa [Ubuntu 18.04にNode.jsをインストールする方法]。

  • Ruby、https://github.com/rbenv/rbenv [rbenv]、およびローカルマシンまたは開発サーバーにインストールされているRails、https://www.digitalocean.com/community/tutorials/how-のステップ1〜4 to-install-ruby-on-rails-with-rbenv-on-ubuntu-18-04 [Ubuntu 18.04でrbenvを使用してRuby on Railsをインストールする方法]。 このチュートリアルでは、Ruby、rbenv、およびRailsを使用します。

ステップ1-SQLite3のインストール

Rails sharkアプリケーションを作成する前に、ユーザーデータを保存するデータベースがあることを確認する必要があります。 Railsはデフォルトでhttps://www.sqlite.org/index.html[SQLite]を使用するように設定されており、多くの場合、これは開発において適切な選択です。 アプリケーションデータは高度なプログラムによる拡張性を必要としないため、SQLiteはニーズを満たします。

まず、パッケージインデックスを更新します。

sudo apt update

次に、 `+ sqlite3 `および ` libsqlite3-dev +`パッケージをインストールします。

sudo apt install sqlite3 libsqlite3-dev

これにより、SQLiteと必要な開発ファイルの両方がインストールされます。

バージョンをチェックして、インストールが成功したことを確認します。

sqlite3 --version
Output 2018-01-22 18:45:57

SQLiteをインストールしたら、アプリケーションの開発を開始できます。

ステップ2-新しいRailsプロジェクトの作成

データベースをインストールしたら、新しいRailsプロジェクトを作成し、Railsがhttps://guides.rubyonrails.org/command_line.html#rails-new[`+rails new + `で提供するデフォルトの定型コードの一部を確認できますコマンド]。

次のコマンドで「++」というプロジェクトを作成します。

rails new

Railsがあなたの新しいプロジェクトのために何を作成しているかを示す大量の出力が表示されます。 以下の出力は、いくつかの重要なファイル、ディレクトリ、およびコマンドを強調しています。

Output     create
    . . .
    create  Gemfile
    . . .
     create  app
     . . .
     create  app/controllers/application_controller.rb
     . . .
     create  app/models/application_record.rb
     . . .
     create  app/views/layouts/application.html.erb
     . . .
     create  config
     create  config/routes.rb
     create  config/application.rb
     . . .
     create  config/environments
     create  config/environments/development.rb
     create  config/environments/production.rb
     create  config/environments/test.rb
     . . .
     create  config/database.yml
     create  db
     create  db/seeds.rb
     . . .
        run  bundle install
     . . .
Bundle complete! 18 Gemfile dependencies, 78 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
     . . .
* bin/rake: Spring inserted
* bin/rails: Spring inserted

ここで強調表示されている出力は、Railsが以下を作成したことを示しています。

  • + Gemfile +:このファイルには、アプリケーションのgem依存関係がリストされます。 gemはRubyソフトウェアパッケージであり、Gemfileを使用するとプロジェクトのソフトウェアニーズを管理できます。

  • + app ++ app +`ディレクトリは、メインアプリケーションコードが存在する場所です。 これには、アプリケーション自体を構成するモデル、コントローラー、ビュー、アセット、ヘルパー、メーラーが含まれます。 Railsは、MCVモデルのアプリケーションレベルのボイラープレートを提供し、 `+ app / models / application_record.rb ++ app / controllers / application_controller.rb +、および `+ app / views / layouts / applicationなどのファイルで開始します.html.erb + `。

  • + config +:このディレクトリには、アプリケーションの構成設定が含まれます。

  • + config / routes.rb +:アプリケーションのルート宣言はこのファイルに存在します。

  • + config / application.rb +:アプリケーションコンポーネントの一般設定はこのファイルにあります。

  • + config / environments +:このディレクトリは、環境の構成設定が存在する場所です。 Railsには、デフォルトで、「+ development」、「+ production」、および「+ test」の3つの環境が含まれています。

  • + config / database.yml +:データベース構成設定はこのファイルに存在し、4つのセクションに分かれています: + default ++ development ++ production +、および + test ++ sqlite3 + gemを含む `+ rails new `コマンドに付属するGemfileのおかげで、 ` config / database.yml `ファイルの ` adapter `パラメーターは既に ` sqlite3 +`に設定されています。このアプリケーションでSQLiteデータベースを使用します。

  • + db +:このフォルダには、データベースのディレクトリhttps://guides.rubyonrails.org/active_record_migrations.html[migrations]が含まれ、 `+ migrate `と呼ばれ、 ` schema.rb `および ` seeds.rb `ファイル。 ` schema.db `にはデータベースに関する情報が含まれ、 ` seeds.rb +`にはデータベースのシードデータを配置できます。

最後に、Railsはhttps://bundler.io/man/bundle-install.1.html[+bundle install + `]コマンドを実行して、 + Gemfile + `にリストされている依存関係をインストールします。

すべての設定が完了したら、 `++`ディレクトリに移動します。

cd

`+rails server + `commandを使用して、Railsサーバーを起動して、アプリケーションが動作していることを確認できます。 ローカルマシンで作業している場合は、次のように入力します。

rails server

Railsはデフォルトで `+ localhost `にバインドするため、ブラウザを ` locahost:3000 +`に移動してアプリケーションにアクセスできるようになります。次の画像が表示されます。

image:https://assets.digitalocean.com/articles/build_rails_app/rails_landing.png [Rails Landing Page]

開発サーバーで作業している場合は、まずポート `+ 3000 +`で接続が許可されていることを確認してください。

sudo ufw allow 3000

次に、サーバーのIPにバインドするために、 `+-binding +`フラグでサーバーを起動します。

rails server --binding=

ブラウザで `+ http://:3000 +`に移動すると、Railsのウェルカムメッセージが表示されます。

見回したら、 `+ CTRL + C +`でサーバーを停止できます。

アプリケーションを作成し、適切な場所に配置したら、Railsのボイラープレートからビルドを開始して、独自のアプリケーションを作成する準備が整います。

ステップ3-アプリケーションの足場

サメ情報アプリケーションを作成するには、アプリケーションデータを管理するモデル、そのデータとのユーザーインタラクションを可能にするビュー、およびモデルとビュー間の通信を管理するコントローラーを作成する必要があります。 これらのものを構築するには、 `+ rails generate scaffold +`コマンドを使用します。このコマンドは、モデル、https://guides.rubyonrails.org/active_record_migrations.html [データベースの移行]を提供し、データベーススキーマ、コントローラー、アプリケーションのhttps://en.wikipedia.org/wiki/Create,_read,_update_and_delete [作成、読み取り、更新、削除](CRUD)操作、およびパーシャル、ヘルパー、テンプレートのテンプレートを管理するためのビューの完全なセットテスト。

`+ generate scaffold +`コマンドは非常に多くの作業を行うため、作成するリソースを詳しく調べて、Railsが内部で行っている作業を理解します。

`+ generate scaffold `コマンドには、モデルの名前とデータベーステーブルに必要なフィールドが含まれます。 Railsはhttps://github.com/rails/rails/tree/master/activerecord[Active Record]を使用して、モデルを持つオブジェクトとして構築されたアプリケーションデータとアプリケーションデータベースとの関係を管理します。 各モデルはhttps://ruby-doc.org/core-2.5.3/Class.html[Ruby class]であると同時に、 ` ActiveRecord

Base +`クラスから継承しています。 これは、Rubyクラスで作業するのと同じ方法でモデルクラスで作業できることを意味しますが、Active Recordからメソッドをプルすることもできます。 Active Recordは、各クラスがデータベースのテーブルにマップされ、そのクラスの各インスタンスがそのテーブルの行にマップされるようにします。

次のコマンドを入力して、 `+ Shark +`モデル、コントローラー、および関連ビューを生成します。

rails generate scaffold Shark name:string facts:text

`+ name:string `と ` facts:text `を使用して、データベーステーブルで必要なフィールドとそれらが受け入れるデータのタイプに関するRails情報を提供しています。 ` text +`はサメの事実により多くの文字を許可しますが、どちらも私たちが望むものを入力する余地を与えてくれます。

このコマンドを入力すると、Railsが生成するすべてのものを説明する出力の長いリストが再び表示されます。 以下の出力は、セットアップのより重要なことの一部を強調しています。

Output      invoke  active_record
     create    db/migrate/_create_sharks.rb
     create    app/models/shark.rb
     . . .
     invoke  resource_route
      route    resources :sharks
     invoke  scaffold_controller
     create    app/controllers/sharks_controller.rb
     invoke    erb
     create      app/views/sharks
     create      app/views/sharks/index.html.erb
     create      app/views/sharks/edit.html.erb
     create      app/views/sharks/show.html.erb
     create      app/views/sharks/new.html.erb
     create      app/views/sharks/_form.html.erb
     . . .

Railsは + app / models / shark.rb +`にモデルを作成し、それに合わせてデータベースを移行しました: `+ db / migrate / _create_sharks.rb +。 移行ファイルのタイムスタンプは、ここに表示されるものとは異なります。

また、コントローラー「+ app / controllers / sharks_controller.rb 」と、アプリケーションのCRUD操作に関連付けられたビューが作成され、「 app / views / sharks 」の下に収集されます。 これらのビューには、ビュー全体で使用されるコードを含む部分的な「 _form.html.erb +」があります。

最後に、Railsは新しいリソースフルルートである `+ resources:sharks `を ` config / routes.rb `に追加しました。 これにより、Railsルーターは着信HTTPリクエストを ` sharks +`コントローラーとその関連ビューと照合できます。

Railsはアプリケーションコードを構築するための多くの作業を行いましたが、何が起こっているのかを理解するためにいくつかのファイルを調べる価値があります。

まず、次のコマンドを使用してコントローラーファイルを見てみましょう。

cat app/controllers/sharks_controller.rb
Outputclass SharksController < ApplicationController
 before_action :set_shark, only: [:show, :edit, :update, :destroy]

 # GET /sharks
 # GET /sharks.json
 def index
   @sharks = Shark.all
 end

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

 # GET /sharks/new
 def new
   @shark = Shark.new
 end

 # GET /sharks/1/edit
 def edit
 end

 # POST /sharks
 # POST /sharks.json
 def create
   @shark = Shark.new(shark_params)

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

 # PATCH/PUT /sharks/1
 # PATCH/PUT /sharks/1.json
 def update
   respond_to do |format|
     if @shark.update(shark_params)
       format.html { redirect_to @shark, notice: 'Shark was successfully updated.' }
       format.json { render :show, status: :ok, location: @shark }
     else
       format.html { render :edit }
       format.json { render json: @shark.errors, status: :unprocessable_entity }
     end
   end
 end

 # DELETE /sharks/1
 # DELETE /sharks/1.json
 def destroy
   @shark.destroy
   respond_to do |format|
     format.html { redirect_to sharks_url, notice: 'Shark was successfully destroyed.' }
     format.json { head :no_content }
   end
 end

 private
   # Use callbacks to share common setup or constraints between actions.
   def set_shark
     @shark = Shark.find(params[:id])
   end

   # Never trust parameters from the scary internet, only allow the white list through.
   def shark_params
     params.require(:shark).permit(:name, :facts)
   end
end

コントローラーは、情報を取得して関連するモデルに渡す方法、および情報を特定のビューに関連付ける方法を管理します。 ご覧のとおり、 `+ sharks +`コントローラーには、標準のCRUD操作にほぼ対応する一連のメソッドが含まれています。 ただし、エラーの場合に効率を有効にするために、CRUD関数よりも多くのメソッドがあります。

たとえば、 `+ create +`メソッドを考えてみましょう:

〜/ sharkapp / app / controllers / sharks_controller.rb

. . .
 def create
   @shark = Shark.new(shark_params)

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

`+ Shark `クラスの新しいインスタンスが正常に保存されると、 ` redirect_to `は新しいリクエストを生成し、それがコントローラーに送信されます。 これは「 GET 」リクエストになり、「 show +」メソッドによって処理されます。このメソッドは、追加したサメをユーザーに表示します。

障害が発生すると、Railsはルーターに別のリクエストを行うのではなく、 `+ app / views / sharks / new.html.erb +`テンプレートを再度レンダリングし、ユーザーにデータを送信する機会を与えます。

Railsは、sharksコントローラーに加えて、コントローラーの + index`メソッドにマップされる + index on`ビューのテンプレートを提供しました。 これをアプリケーションのルートビューとして使用するので、見てみる価値があります。

次を入力して、ファイルを出力します。

cat app/views/sharks/index.html.erb
Output<p id="notice"><%= notice %></p>

<h1>Sharks</h1>

<table>
 <thead>
   <tr>
     <th>Name</th>
     <th>Facts</th>
     <th colspan="3"></th>
   </tr>
 </thead>

 <tbody>
   <% @sharks.each do |shark| %>
     <tr>
       <td><%= shark.name %></td>
       <td><%= shark.facts %></td>
       <td><%= link_to 'Show', shark %></td>
       <td><%= link_to 'Edit', edit_shark_path(shark) %></td>
       <td><%= link_to 'Destroy', shark, method: :delete, data: { confirm: 'Are you sure?' } %></td>
     </tr>
   <% end %>
 </tbody>
</table>

<br>

<%= link_to 'New Shark', new_shark_path %>

+ index +`ビューは、データベースの `+ sharks +`テーブルにマッピングされた `+ Shark +`クラスのインスタンスを繰り返し処理します。 ビューはhttps://ruby-doc.org//stdlib-1.9.3/libdoc/erb/rdoc/ERB.html[ERBテンプレート]を使用して、個々のサメインスタンスに関連付けられているテーブルから各フィールドを出力します。 + name + `および + facts + `。

次に、ビューはhttps://api.rubyonrails.org/v5.2.3/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to [+ link_to +]ヘルパーを使用して、指定された文字列でハイパーリンクを作成しますリンクのテキストおよび宛先として指定されたパスとして。 パス自体は、https://guides.rubyonrails.org/routing.html#path-and-url-helpers [helpers]を介して可能になります。 + railsはscaffold + `コマンドを生成します。

`+ index `ビューに加えて、 ` new `ビューを見て、Railsがビューでパーシャルをどのように使用しているかを見ることができます。 次を入力して、 ` app / views / sharks / new.html.erb +`テンプレートを出力します。

cat app/views/sharks/new.html.erb
Output<h1>New Shark</h1>

<%= render 'form', shark: @shark %>

<%= link_to 'Back', sharks_path %>

このテンプレートは新しいサメエントリの入力フィールドがないように見えますが、 `+ render 'form' `への参照は、テンプレートが ` _form.html.erb +`パーシャルをプルしており、ビュー間で繰り返されます。

そのファイルを見ると、新しいサメのインスタンスがどのように作成されるかを完全に把握できます。

cat app/views/sharks/_form.html.erb
Output<%= form_with(model: shark, local: true) do |form| %>
 <% if shark.errors.any? %>
   <div id="error_explanation">
     <h2><%= pluralize(shark.errors.count, "error") %> prohibited this shark from being saved:</h2>

     <ul>
     <% shark.errors.full_messages.each do |message| %>
       <li><%= message %></li>
     <% end %>
     </ul>
   </div>
 <% end %>

 <div class="field">
   <%= form.label :name %>
   <%= form.text_field :name %>
 </div>

 <div class="field">
   <%= form.label :facts %>
   <%= form.text_area :facts %>
 </div>

 <div class="actions">
   <%= form.submit %>
 </div>
<% end %>

このテンプレートはhttps://api.rubyonrails.org/v5.2.3/classes/ActionView/Helpers/FormHelper.html#method-i-form_with [+ form_with +] https://api.rubyonrails.orgを使用します/v5.2.3/classes/ActionView/Helpers/FormHelper.html [フォームヘルパー]。 フォームヘルパーは、特定のモデルのフィールドとスコープを使用して、ユーザー入力から新しいオブジェクトを簡単に作成できるように設計されています。 ここでは、 `+ form_with `は引数として ` model:shark `を取り、作成する新しいフォームビルダーオブジェクトには、 ` sharks `テーブルのフィールドに対応するフィールド入力があります。 したがって、ユーザーには、サメの「 name 」とサメの「 facts」の両方を入力するフォームフィールドがあります。

このフォームを送信すると、アプリケーションの残りの部分がhttps://api.rubyonrails.org/classes/ActionController/Parameters.html[params method]経由でアクセスできるユーザーデータを含むJSON応答が作成され、 `+そのデータを持つActionController

Parameters + `オブジェクト。

`+ rails generate scaffold +`が生成したものがわかったので、次にアプリケーションのルートビューの設定に進むことができます。

手順4-アプリケーションルートビューの作成と機能のテスト

ユーザーがアプリケーションの目的をすぐに理解できるように、アプリケーションのランディングページをアプリケーションのルートにマップすることが理想です。

これを処理する方法はいくつかあります。たとえば、 `+ Welcome `コントローラーと関連する ` index `ビューを作成して、ユーザーに汎用ランディングページを提供し、さまざまな部分にリンクすることもできます。応用。 ただし、今回のケースでは、ユーザーに「 index +」サメビューを表示させるだけで、アプリケーションの目的を十分に紹介できます。

これを設定するには、 `+ config / routes.rb +`のルーティング設定を変更して、アプリケーションのルートを指定する必要があります。

編集のために `+ config / routes.rb `を開き、 ` nano +`またはお気に入りのエディターを使用します。

nano config/routes.rb

ファイルは次のようになります。

〜/ sharkapp / config / routes.rb

Rails.application.routes.draw do
 resources :sharks
 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

より具体的な設定を行わない場合、 `+ http:// localhost:3000 `または ` http://:3000 +`のデフォルトビューがデフォルトのRailsウェルカムページになります。

アプリケーションのルートビューをsharksコントローラーの `+ index +`ビューにマップするには、次の行をファイルに追加する必要があります。

〜/ sharkapp / config / routes.rb

Rails.application.routes.draw do
 resources :sharks


 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

これで、ユーザーがアプリケーションルートに移動すると、サメ​​の完全なリストが表示され、新しいサメエントリを作成したり、既存のエントリを確認したり、特定のエントリを編集または削除したりできます。

ファイルを保存し、編集が終了したらエディターを終了します。 ファイルの編集に「+ nano 」を使用した場合は、「 CTRL + X 」、「 Y 」、「 ENTER +」の順に押すと編集できます

次のコマンドで移行を実行できるようになりました。

rails db:migrate

移行を確認する出力が表示されます。

Railsサーバーをもう一度起動します。 ローカルで作業している場合は、次を入力します。

rails s

開発サーバーで、次を入力します。

rails s --binding=

ローカルで作業している場合は `+ localhost:3000 `に、開発サーバーで作業している場合は ` http://:3000 +`に移動します。

アプリケーションのランディングページは次のようになります。

image:https://assets.digitalocean.com/articles/build_rails_app/index_no_style.png [アプリケーションのランディングページ]

新しいサメを作成するには、ページの下部にある* New Shark *リンクをクリックして、 `+ sharks / new +`ルートに移動します。

image:https://assets.digitalocean.com/articles/build_rails_app/new_no_style.png [新しいサメの作成]

デモ情報を追加して、アプリケーションをテストしましょう。 * Name フィールドに「Great White」を入力し、 Facts *フィールドに「Scary」を入力します。

image:https://assets.digitalocean.com/articles/build_rails_app/add_shark_no_style.png [ホオジロザメの追加]

[作成]ボタンをクリックして、サメを作成します。

これにより、 + show_`ルートに移動します。これは、 + before_action + フィルターのおかげで、作成したサメの + id + を取得する + set_shark + `メソッドで設定されます。

〜/ sharkapp / app / controllers / sharks_controller.rb

class SharksController < ApplicationController
 before_action , only: [, :edit, :update, :destroy]

 . . .

 def show
 end

 . . .

 private
   # Use callbacks to share common setup or constraints between actions.
   def set_shark
     @shark = Shark.find(params[])
   end
 . . .

image:https://assets.digitalocean.com/articles/build_rails_app/show_no_style.png [サメを見る]

サメのエントリで[編集]をクリックして、編集機能をテストできます。 これにより、そのサメの `+ edit +`ルートに移動します。

image:https://assets.digitalocean.com/articles/build_rails_app/edit_no_style.png [サメの編集]

グレートホワイトに関する「事実」を変更して、「怖い」の代わりに「大きい」と読み、「*サメの更新*」をクリックします。 これにより、 ` show`ルートに戻ります:

image:https://assets.digitalocean.com/articles/build_rails_app/updated_no_style.png [更新されたサメ]

最後に、「戻る」をクリックすると、更新された「+ index +」ビューに移動します。

image:https://assets.digitalocean.com/articles/build_rails_app/new_index_no_style.png [新しいインデックスビュー]

アプリケーションの基本機能をテストしたので、いくつかの検証とセキュリティチェックを追加して、すべてをより安全にすることができます。

ステップ5-検証の追加

サメアプリケーションはユーザーからの入力を受け入れることができますが、ユーザーが事実を追加せずにサメを作成しようとしたり、既にデータベースにあるサメのエントリを作成したりする場合を想像してください。 モデルに検証を追加することにより、データベースに入力される前にデータをチェックするメカニズムを作成できます。 アプリケーションのロジックはモデル内にあるため、ここでデータ入力を検証することは、アプリケーションの他の場所で行うよりも意味があります。

このチュートリアルでは検証テストの記述については説明しませんが、https://guides.rubyonrails.org/testing.html [Railsのドキュメント]を参照することでテストの詳細を確認できます。

サーバーをまだ停止していない場合は、「+ CTRL + C +」と入力して停止します。

`+ shark.rb +`モデルファイルを開きます。

nano app/models/shark.rb
現在、このファイルは、 + Shark +`クラスが `+ ApplicationRecord +`を継承し、それがhttps://api.rubyonrails.org/classes/ActiveRecord/Base.html [+ ActiveRecord

Base +`を継承していることを示しています]:

〜/ sharkapp / app / models / shark.rb

class Shark < ApplicationRecord
end

最初に、 `+ name +`フィールドにいくつかの検証を追加して、フィールドに入力されていること、エントリが一意であること、エントリの重複を防ぐことを確認します。

〜/ sharkapp / app / models / shark.rb

class Shark < ApplicationRecord

end

次に、 `+ facts +`フィールドの検証を追加して、それも入力されていることを確認します。

〜/ sharkapp / app / models / shark.rb

class Shark < ApplicationRecord
 validates :name, presence: true, uniqueness: true

end

ここでは、一意のサメのエントリに関連付けられている限り、ファクトの一意性についてはあまり関心を持ちません。

完了したら、ファイルを保存して閉じます。

ローカルで作業しているか開発サーバーで作業しているかに応じて、 `+ rails s `または ` rails s --binding = +`でサーバーをもう一度起動します。

`+ http:// localhost:3000 `または ` http://:3000 +`でアプリケーションのルートに移動します。

  • New Shark をクリックします。 フォームで、 Name フィールドに“ Great White”を、 Facts フィールドに“ Big Teeth”を追加して、 Create Shark *をクリックします。 次の警告が表示されるはずです。

image:https://assets.digitalocean.com/articles/build_rails_app/unique_validate.png [独自の検証警告]

次に、他の検証をチェックできるかどうかを見てみましょう。 [戻る]をクリックしてホームページに戻り、もう一度[新しいサメ]をクリックします。 新しいフォームで、*名前*フィールドに「タイガーシャーク」と入力し、*ファクト*を空白のままにします。 * Create Shark *をクリックすると、次の警告がトリガーされます。

image:https://assets.digitalocean.com/articles/build_rails_app/fact_presence.png [ファクトプレゼンス警告]

これらの変更により、データベースに保存されるデータの一貫性を確保するために、アプリケーションでいくつかの検証が行われます。 これで、アプリケーションのユーザーに注意を向け、アプリケーションデータを変更できるユーザーを定義できます。

ステップ6-認証の追加

検証を実施すると、データベースに保存されるデータについていくつかの保証があります。 しかし、ユーザーはどうですか? すべてのユーザーをデータベースに追加したくない場合は、許可されたユーザーのみがサメを追加できるようにするための認証手段を追加する必要があります。 これを行うには、https://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Basic.html [+ http_basic_authenticate_with + method]を使用します。これにより、ユーザー名とパスワードの組み合わせを作成できますユーザーを認証します。

Railsでユーザーを認証するには、https://rubygems.org/gems/bcrypt/versions/3.1.12 [+ bcrypt +]またはhttps://rubygems.org/gems/ devise [+ devise +] gem。 ただし、ここでは、アプリケーション全体のアクションに適用するメソッドをアプリケーションコントローラーに追加します。 これは、将来アプリケーションにコントローラーを追加する場合に役立ちます。

`+ CTRL + C +`でサーバーを再度停止します。

`+ ApplicationController +`を定義するファイルを開きます:

nano app/controllers/application_controller.rb

内部には、アプリケーション内の他のコントローラーが継承する `+ ApplicationController +`クラスの定義が表示されます。

〜/ sharkapp / app / controllers / application_controller.rb

class ApplicationController < ActionController::Base
end

ユーザーを認証するために、 `+ http_basic_authenticate_with +`メソッドでハードコードされたユーザー名とパスワードを使用します。 ファイルに次のコードを追加します。

〜/ sharkapp / app / controllers / application_controller.rb

class ApplicationController < ActionController::Base

end

ここでユーザー名とパスワードを指定することに加えて、必要ではないルート「+ index 」と「 show 」を指定することで認証を制限しました。 これを達成する別の方法は、 ` only:[:create、:update、:destroy] +`と書くことでした。 このようにして、すべてのユーザーはすべてのサメを見て、特定のサメに関する事実を読むことができます。 ただし、サイトコンテンツの変更に関しては、ユーザーがアクセス権を持っていることを証明する必要があります。

より堅牢なセットアップでは、この方法で値をハードコーディングすることは望ましくありませんが、デモの目的で、アプリケーションのルートに認証を含める方法を確認できます。 また、RailsがセッションデータをデフォルトでCookieに保存する方法を確認できます。指定したアクションで認証すると、同じセッションで再度認証する必要はありません。

編集が終了したら、 `+ app / controllers / application_controller.rb +`を保存して閉じます。 これで、実際の認証をテストできます。

`+ rails s `または ` rails s --binding = `でサーバーを起動し、 ` http:// localhost:3000 `または ` http://:3000 +`でアプリケーションに移動します。

ランディングページで、* New Shark *ボタンをクリックします。 これにより、次の認証ウィンドウがトリガーされます。

image:https://assets.digitalocean.com/articles/build_rails_app/sign_in_two.png [ユーザー認証]

`+ app / controllers / application_controller.rb +`に追加したユーザー名とパスワードの組み合わせを入力すると、新しいサメを安全に作成できます。

これで、データ検証と基本認証スキームを備えた、機能するサメアプリケーションが完成しました。

結論

このチュートリアルで作成したRailsアプリケーションは、さらなる開発に使用できる出発点です。 Railsエコシステムの調査に興味がある場合は、https://guides.rubyonrails.org/ [プロジェクトドキュメント]から始めるのが最適です。

https://www.digitalocean.com/community/tutorials/how-to-create-nested-resources-for-a-ruby-on-rails-application [ Ruby on Railsアプリケーションのネストされたリソースを作成する方法]。アプリケーションのモデルとルートを構築する方法を示します。

さらに、https://reactjs.org/ [React]などのフレームワークを使用して、プロジェクトのより堅牢なフロントエンドをセットアップする方法を検討することもできます。 Ruby on Railsプロジェクトのセットアップ方法React Frontendは、これを行う方法に関するガイダンスを提供します。

さまざまなデータベースオプションを調べたい場合は、https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-ruby-on-rails-application-onも確認できます。 -ubuntu-18-04 [Ubuntu 18.04でRuby on RailsアプリケーションでPostgreSQLを使用する方法]。SQLiteの代わりにhttps://www.postgresql.org/[PostgreSQL]を操作する方法を説明しています。 PostgreSQLチュートリアルのライブラリを参照して、このデータベースの操作の詳細を確認することもできます。

Related