RubyonRailsアプリケーションを構築する方法

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

序章

Rails は、Rubyで記述されたWebアプリケーションフレームワークです。 共通の目標がある場合、設定された規則が開発者に最も役立つと仮定して、アプリケーション開発には意見の分かれるアプローチを取ります。 したがって、Railsは、ルーティング、ステートフルデータ、アセット管理などを処理するための規則を提供して、ほとんどのWebアプリケーションが必要とするベースライン機能を提供します。

Railsは、 model-view-controller (MCV)アーキテクチャパターンに従います。これにより、モデル内にあるアプリケーションのロジックが、アプリケーション情報のルーティングと表示から分離されます。 この組織構造は、開発者がコードをヘルパーおよび部分に抽出できるようにする他の規則とともに、アプリケーションコードが不必要に繰り返されないようにします

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

前提条件

このチュートリアルに従うには、次のものが必要です。

  • Ubuntu18.04を実行しているローカルマシンまたは開発サーバー。 開発マシンには、管理者権限を持つroot以外のユーザーと、ufwで構成されたファイアウォールが必要です。 これを設定する方法については、 Ubuntu18.04を使用した初期サーバー設定のチュートリアルを参照してください。
  • Node.jsおよびnpmがローカルマシンまたは開発サーバーにインストールされています。 このチュートリアルでは、Node.jsバージョン10.16.3とnpmバージョン6.9.0を使用します。 Ubuntu 18.04にNode.jsとnpmをインストールする手順については、 Ubuntu18.04にNode.jsをインストールする方法の「PPAを使用したインストール」セクションの手順に従ってください。
  • Ubuntu18.04でrbenvを使用してRubyonRailsをインストールする方法の手順1〜4に従って、ローカルマシンまたは開発サーバーにインストールされたRuby、 rbenv 、およびRails。 このチュートリアルでは、Ruby 2.5.1 、rbenv 1..1.2 、およびRails 5.2.0を使用します。

ステップ1—SQLite3をインストールする

Rails sharkアプリケーションを作成する前に、ユーザーデータを格納するデータベースがあることを確認する必要があります。 RailsはデフォルトでSQLiteを使用するように構成されており、これは多くの場合、開発において適切な選択です。 私たちのアプリケーションデータは高レベルのプログラムによる拡張性を必要としないため、SQLiteは私たちのニーズを満たします。

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

sudo apt update

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

sudo apt install sqlite3 libsqlite3-dev

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

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

sqlite3 --version
Output3.22.0 2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2alt1

SQLiteをインストールすると、アプリケーションの開発を開始する準備が整います。

ステップ2—新しいRailsプロジェクトを作成する

データベースをインストールしたら、新しいRailsプロジェクトを作成し、Railsがrailsnewコマンドで提供するデフォルトのボイラープレートコードのいくつかを確認できます。

次のコマンドを使用して、sharkappというプロジェクトを作成します。

rails new sharkapp

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を使用するとプロジェクトのソフトウェアニーズを管理できます。
  • appappディレクトリは、メインのアプリケーションコードが存在する場所です。 これには、アプリケーション自体を構成するモデル、コントローラー、ビュー、アセット、ヘルパー、およびメーラーが含まれます。 Railsは、MCVモデルがapp/models/application_record.rbapp/controllers/application_controller.rbapp/views/layouts/application.html.erbなどのファイルで開始するためのアプリケーションレベルの定型文を提供します。
  • config :このディレクトリには、アプリケーションの構成設定が含まれています。 config / routers.rb:アプリケーションのルート宣言はこのファイルにあります。 config / application.rb:アプリケーションコンポーネントの一般設定は、このファイルにあります。
  • config/environments:このディレクトリは、環境の構成設定が存在する場所です。 Railsには、デフォルトでdevelopmentproduction、およびtestの3つの環境が含まれています。
  • config/database.yml:データベース構成設定はこのファイルにあり、defaultdevelopmentproductiontestの4つのセクションに分かれています。 。 sqlite3gemを含むrails newコマンドに付属のGemfileのおかげで、config/database.ymlファイルのadapterパラメーターは[に設定されています。 X152X]すでに、このアプリケーションでSQLiteデータベースを使用することを指定しています。
  • db:このフォルダには、schema.rbおよびseeds.rbファイルとともに、migrateと呼ばれるデータベースmigrationsのディレクトリが含まれています。 schema.dbにはデータベースに関する情報が含まれ、seeds.rbにはデータベースのシードデータを配置できます。

最後に、Railsは bundle install コマンドを実行して、Gemfileにリストされている依存関係をインストールします。

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

cd sharkapp

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

rails server 

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

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

sudo ufw allow 3000

次に、--bindingフラグを使用してサーバーを起動し、サーバーIPにバインドします。

rails server --binding=your_server_ip

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

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

アプリケーションを作成して配置したら、Railsボイラープレートから構築を開始して独自のアプリケーションを作成する準備が整います。

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

サメ情報アプリケーションを作成するには、アプリケーションデータを管理するためのモデル、そのデータとのユーザーインタラクションを可能にするビュー、およびモデルとビューの間の通信を管理するためのコントローラーを作成する必要があります。 これらを構築するには、rails generate scaffoldコマンドを使用します。これにより、モデル、データベーススキーマを変更するデータベース移行、コントローラー、管理するビューのフルセットが提供されます。 アプリケーションの作成、読み取り、更新、削除](CRUD)操作、およびパーシャル、ヘルパー、テストのテンプレート。

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

generate scaffoldコマンドには、モデルの名前とデータベーステーブルに必要なフィールドが含まれます。 RailsはActiveRecord を使用して、モデルを持つオブジェクトとして構築されたアプリケーションデータとアプリケーションデータベースの間の関係を管理します。 各モデルはRubyクラスであり、ActiveRecord::Baseクラスからも継承されています。 これは、Rubyクラスを操作するのと同じ方法でモデルクラスを操作できると同時に、ActiveRecordからメソッドを取得できることを意味します。 Active Recordは、各クラスがデータベース内のテーブルにマップされ、そのクラスの各インスタンスがそのテーブル内の行にマップされていることを確認します。

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

rails generate scaffold Shark name:string facts:text

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

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

Output      invoke  active_record
      create    db/migrate/20190804181822_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/20190804181822_create_sharks.rb。 移行ファイルのタイムスタンプは、ここに表示されているものとは異なります。

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

最後に、Railsは新しいリソースフルルートresources :sharksconfig/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テンプレートを再度レンダリングし、ユーザーにデータを送信する別の機会を提供します。

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

次のように入力してファイルを出力します。

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クラスのインスタンスを反復処理します。 ERBテンプレートを使用して、ビューは、個々のサメインスタンスに関連付けられているテーブルから各フィールドnameおよびfactsを出力します。

次に、ビューは link_to ヘルパーを使用して、提供された文字列をリンクのテキストとして、提供されたパスを宛先として、ハイパーリンクを作成します。 パス自体は、rails generate scaffoldコマンドでsharksリソースフルルートを定義したときに使用可能になったヘルパーを介して可能になります。

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パーシャルをプルしていることを示しています。これにより、ビュー間で繰り返されるコードが抽出されます。 。

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

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 %>

このテンプレートは、 form_withフォームヘルパーを利用します。 フォームヘルパーは、特定のモデルのフィールドとスコープを使用して、ユーザー入力から新しいオブジェクトを簡単に作成できるように設計されています。 ここで、form_withmodel: sharkを引数として取り、それが作成する新しいフォームビルダーオブジェクトには、sharksテーブルのフィールドに対応するフィールド入力があります。 したがって、ユーザーは、サメnameとサメfactsの両方を入力するためのフォームフィールドを持っています。

このフォームを送信すると、ユーザーデータを含むJSON応答が作成され、アプリケーションの残りの部分が paramsメソッドを介してアクセスできます。このメソッドは、そのデータを使用してActionController::Parametersオブジェクトを作成します。

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

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

理想的には、アプリケーションのランディングページをアプリケーションのルートにマップして、ユーザーがアプリケーションの目的をすぐに理解できるようにする必要があります。

これを処理する方法はいくつかあります。たとえば、Welcomeコントローラーと関連するindexビューを作成して、ユーザーに次のリンク先にもリンクできる一般的なランディングページを提供することができます。アプリケーションのさまざまな部分。 ただし、私たちの場合、ユーザーにindex sharksビューを表示させるだけで、今のところアプリケーションの目的を十分に紹介できます。

これを設定するには、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://your_server_ip:3000のデフォルトのビューがデフォルトのRailsウェルカムページになります。

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

〜/sharkapp/config/routes.rb

Rails.application.routes.draw do
  resources :sharks

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

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

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

これで、次のコマンドを使用して移行を実行できます。

rails db:migrate

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

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

rails s

開発サーバーで、次のように入力します。

rails s --binding=your_server_ip

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

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

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

アプリケーションをテストするために、いくつかのデモ情報を追加しましょう。 Name フィールドに「GreatWhite」を入力し、Factsフィールドに「Scary」を入力します。

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

これにより、showルートに移動します。このルートは、before_actionフィルターのおかげで、idメソッドで設定されます。作成したばかりのサメ:

〜/ sharkapp / app / controllers / sharks_controller.rb

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

  . . . 

  def show
  end

  . . . 

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

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

ホオジロザメのfactsを「怖い」ではなく「大」に変更し、サメの更新をクリックします。 これにより、showルートに戻ります。

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

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

ステップ5—検証を追加する

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

このチュートリアルでは検証テストの作成については説明しませんが、テストの詳細については、Railsのドキュメントを参照してください。

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

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

nano app/models/shark.rb

現在、このファイルは、SharkクラスがApplicationRecordから継承し、 ActiveRecord ::Baseから継承することを示しています。

〜/ sharkapp / app / models / shark.rb

class Shark < ApplicationRecord
end

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

〜/ sharkapp / app / models / shark.rb

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

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

〜/ sharkapp / app / models / shark.rb

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

ここでは、固有のサメのエントリに関連付けられている限り、事実の一意性についてはあまり気にしません。

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

ローカルで作業しているか開発サーバーで作業しているかに応じて、rails sまたはrails s --binding=your_server_ipのいずれかを使用してサーバーを再起動します。

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

NewSharkをクリックします。 フォームで、 Name フィールドに「GreatWhite」を追加し、 Facts フィールドに「BigTeeth」を追加して、 CreateSharkをクリックします。 次の警告が表示されます。

それでは、他の検証を確認できるかどうかを見てみましょう。 戻るをクリックしてホームページに戻り、もう一度新しいサメをクリックします。 新しいフォームで、 Name フィールドに「TigerShark」と入力し、Factsを空白のままにします。 シャークの作成をクリックすると、次の警告がトリガーされます。

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

ステップ6—認証の追加

検証が行われると、データベースに保存されているデータについていくつかの保証があります。 しかし、ユーザーはどうですか? すべてのユーザーをデータベースに追加したくない場合は、許可されたユーザーのみがサメを追加できるように、いくつかの認証手段を追加する必要があります。 これを行うには、 http_basic_authenticate_withメソッドを使用します。これにより、ユーザーを認証するためのユーザー名とパスワードの組み合わせを作成できます。

bcryptまたはdeviseジェムを使用するなど、Railsでユーザーを認証する方法はいくつかあります。 ただし、今のところ、アプリケーション全体のアクションに適用するメソッドをアプリケーションコントローラーに追加します。 これは、将来、アプリケーションにコントローラーを追加する場合に役立ちます。

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
  http_basic_authenticate_with name: 'sammy', password: 'shark', except: [:index, :show]
end

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

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

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

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

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

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

これで、データ検証と基本認証スキームを備えた、動作するsharkアプリケーションができました。

結論

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

Ruby on Railsアプリケーションのネストされたリソースを作成する方法を読んで、プロジェクトにネストされたリソースを追加する方法についても学ぶことができます。これは、アプリケーションのモデルとルートを構築する方法を示しています。

さらに、 React などのフレームワークを使用して、プロジェクトのより堅牢なフロントエンドをセットアップする方法を検討することもできます。 Reactフロントエンドを使用してRubyonRailsプロジェクトをセットアップする方法は、これを行う方法についてのガイダンスを提供します。

さまざまなデータベースオプションを調べたい場合は、 Ubuntu18.04のRubyonRailsアプリケーションでPostgreSQLを使用する方法を確認することもできます。この方法では、代わりにPostgreSQLを使用する方法について説明しています。 SQLiteの。 このデータベースの操作について詳しくは、PostgreSQLチュートリアルのライブラリを参照することもできます。