Ruby-on-rails-rails-scaffolding

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

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はその仕事を自動的に行います。