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