2020年3月20日 542 reads

Scaffolding in Ruby on Rails は、モデル、ビュー、コントローラのセットを自動生成し、通常は 1 つのデータベース テーブルに使用することを指します。

たとえば、次のコマンドを使用して、Story テーブルの完全な CRUD (作成、読み取り、更新、削除) Web インターフェイスを備えたすぐに使えるコントローラ、モデル、ビューを自動生成できます:

$rails generate scaffold Story title:string content:text

これを行うのはとても簡単で、自分ですべてをコーディングする代わりに、多くの時間を節約できます!

Scaffold or Models?

必要なものすべて(および不要なもの)を生成する scaffold と比較して、モデルはいくつかの関連コンポーネントのみを作成します。 scaffold とモデルの違いを説明する最も良い、そして私のお気に入りの方法は、次の例を使用することです:

Generate models

一旦コマンド

$rails generate model Story title:string content:text

を入力すると、次のように生成します:

invoke active_record によりモデルがデータベースに結び付けられ、次の行は移行ファイルを作成するものです。 マイグレーションはデータベースのスキーマを変更するために使用されます。 このマイグレーションファイルは、’stories’ というデータベーステーブルと、’title’ と ‘content’ のデータベースカラムを作成します。

3行目はモデル (Active Record を継承した Ruby クラス) を作成します。 これによって、Active Recordで呼び出せるすべてのメソッドがモデルで呼び出せるようになります。 最後の 3 行は、モデルに関連するテストファイルを作成します。

scaffolding は素早く立ち上げることができますが、生成されるコードはあなたのアプリケーションに完全に適合するとは思えません。 おそらく、生成されたコードをカスタマイズしたいと思うことでしょう。 経験豊富なRails開発者の多くは、scaffoldingを完全に避けて、ソースコードのすべてまたは大部分をゼロから書き上げることを好みます。 これについては RailsGuides で詳しく説明しています。

おわかりのように、generate models はページに情報を表示するためのビューを一切作成しません。 完全ですぐに使えるアプリケーションを作成するには、

  • generate controllers (これはビューも生成します) または
  • generate scaffold (モデル、ビュー、コントローラを生成して routes.rb ファイルに書き込みます) が必要になります。

モデルを生成した後に気が変わって scaffold を使用することにした場合、いつでも

$rails generate scaffold <name>

を実行でき、不足しているすべてのファイルが作成されます。

Generate scaffold

コマンドを入力すると、次のファイルが生成されます。

$rails generate scaffold Story title:string content:text

モデル関連のテストを作成すると、次の行でストーリーへのリソース ルートが生成されます。 リソースルートを生成した後、コントローラとそのアクション (index、show、new、edit、create、update、destroy)、およびこれらのアクションごとのビューとコントローラテストが生成されます。

RailsルーターはURLを認識し、コントローラのアクションに接続します。 デフォルトでは、コントローラのアクションは同じ名前のビューをレンダリングします。

Migration

スクリプト (generate model/generate scaffold) を使用して移行を作成するたびに、正しいディレクトリに新しい移行が追加されます。 データベースに追加されていない移行を確認するには、

$rake db:migrate

を使用します。

Destroy

scaffold を完全に削除しても意図どおりに動作するように、誰もが自由にアプリケーションを編集し必要な変更を行うことが可能です。 scaffold は次の方法で削除できます:

  1. scaffold を生成します。
    $rails generate scaffold Story
  2. ファイルをマイグレーションした場合は、ロールバックを実行する。
    $rake db:rollback
  3. scaffoldを破棄または元に戻す。
    $rails destroy scaffold Story

これを行うことにより、scaffold によって作成されたすべてのファイルを削除しますが、手動で行ったかもしれない追加の変更は削除されません。

結論

簡単な例、迅速なモックアップ、またはテストに関して、scaffold は使用するのに素晴らしいものです。 しかし、新しいアプリケーションを開発することを決めたら、必ず自分自身のモデルを生成してください。 常にアプリケーションをテストすることを忘れずに、Capybara を使ってその方法を見つけてください!

今日は何か新しい発見があったでしょうか?

前回の記事:https://kolosek.com/rails-scaffold/

タグ

Join Hacker Noon

無料アカウントを作成してカスタム読書体験をロック解除する。

コメントを残す

メールアドレスが公開されることはありません。