2014年6月25日水曜日

1-4 scaffoldを使ってRailsでの開発を体験しよう

 scaffoldはCRUD(Create/Read/Update/Delete)を簡単に実現させることができる。詳しくは2章だって。
MVCそれぞれのファイルとコードの生成、データベースのテーブル定義ファイルの生成をコマンド一つで終わらせてくれる。
 すげーな。自分の作りたいテキトーなサイトなんて、これベースでいけちゃうんじゃないの。
rails generate scaffold task content:text
はい、作れた。/appの中にMVCそれぞれの最低限必要なファイルが 作られたようです。
 taskのところがコントローラ名。その後はその要素。カラム名:変数タイプ、という書式。

 /db/migrate内には、データベースのテーブルを作成するために必要な情報が書き記された長い名前のファイルが作られています。
 その後、この生成されたファイルを基にデータベースの作成とテーブルへの変更を行う。
rake db:create
rake db:migrate
プライマリーキーidとタイプスタンプt.timestampsは自動で作られる。

 一応、データベースソフトsqlite3で、どのような命令が実行されたか確認してみる。
$ sqlite3 db/development.sqlite3 ".schema tasks"
CREATE TABLE "tasks" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "content" text, "created_at" datetime, "updated_at" datetime);
おっと、なんかもう怪しくなってきた。眠いし。

 migrationの状態を確認することができる。statusがupならmigration済み。downは未適用。
$ rake db:migrate:status
database: /Users/moc720814/work/todo/db/development.sqlite3
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20140625033406  Create tasks
確認がいくつか入りましたが、これでscaffoldによって簡単なサイトができました。アクセスは、http://localhost:3000/tasksで可能です。

 どのURLがどのページとリンクしているのか、といったルーティング情報については、下記のように特定のURLにアクセスするか、ターミナル上でコマンドを打ちます。
http://localhost:3000/rails/info/routes #このURLにルーティング情報が表示される
$ rake routes
   Prefix Verb   URI Pattern               Controller#Action
    tasks GET    /tasks(.:format)          tasks#index
          POST   /tasks(.:format)          tasks#create
 new_task GET    /tasks/new(.:format)      tasks#new
edit_task GET    /tasks/:id/edit(.:format) tasks#edit
     task GET    /tasks/:id(.:format)      tasks#show
          PATCH  /tasks/:id(.:format)      tasks#update
          PUT    /tasks/:id(.:format)      tasks#update
          DELETE /tasks/:id(.:format)      tasks#destroy
  例えば、黄色いラインについては、HTTPのPOSTメソッドで/tasksへリクエストするとtasksコントローラのcreateメソッドが実行される、という意味。メソッドって言葉にまだ慣れないな…。
 Prefixについては、htmlを生成するerbファイル(Embedded Ruby)で/tasks/editをedit_task_path等と表現できるようになるようだけど、イマイチ効能がよくわからない。
 また、このルーティングの設定はどこでやってんの、という疑問については、/config/routes.rbを見ればいいのですが、見てもよくわからない。
Rails.application.routes.draw do
  resources :tasks
end
コメントアウトされている行を抜かせばこの3行しか無い。要はresourcesメソッドに:tasksを渡せばその辺はCRUDが実現できるようにうまくやっといてあげる、ということらしいです。
 ところでこのコロンは何だい?シンボル?理解し難いね…。

参考:[Rails]Rubyのカベ-シンボルって何だ?

 HTTPメソッドのGET/POST/PUT/DELETEがshow/create/update/destroyアクションに対応していて、RESTfulな考え方をベースに実現されている。逆に言えばRESTfulを意識して開発するとRailsの恩恵を受けやすく、わかりやすい構造になる、と。わかりにくいよ!


0 件のコメント:

コメントを投稿