scaffoldはCRUD(Create/Read/Update/Delete)を簡単に実現させることができる。詳しくは2章だって。
MVCそれぞれのファイルとコードの生成、データベースのテーブル定義ファイルの生成をコマンド一つで終わらせてくれる。すげーな。自分の作りたいテキトーなサイトなんて、これベースでいけちゃうんじゃないの。
rails generate scaffold task content:textはい、作れた。/appの中にMVCそれぞれの最低限必要なファイルが 作られたようです。
taskのところがコントローラ名。その後はその要素。カラム名:変数タイプ、という書式。
/db/migrate内には、データベースのテーブルを作成するために必要な情報が書き記された長い名前のファイルが作られています。
その後、この生成されたファイルを基にデータベースの作成とテーブルへの変更を行う。
rake db:createプライマリーキーidとタイプスタンプt.timestampsは自動で作られる。
rake db:migrate
一応、データベースソフト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確認がいくつか入りましたが、これでscaffoldによって簡単なサイトができました。アクセスは、http://localhost:3000/tasksで可能です。
database: /Users/moc720814/work/todo/db/development.sqlite3
Status Migration ID Migration Name
--------------------------------------------------
up 20140625033406 Create tasks
どのURLがどのページとリンクしているのか、といったルーティング情報については、下記のように特定のURLにアクセスするか、ターミナル上でコマンドを打ちます。
http://localhost:3000/rails/info/routes #このURLにルーティング情報が表示される
$ rake routes例えば、黄色いラインについては、HTTPのPOSTメソッドで/tasksへリクエストするとtasksコントローラのcreateメソッドが実行される、という意味。メソッドって言葉にまだ慣れないな…。
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
Prefixについては、htmlを生成するerbファイル(Embedded Ruby)で/tasks/editをedit_task_path等と表現できるようになるようだけど、イマイチ効能がよくわからない。
また、このルーティングの設定はどこでやってんの、という疑問については、/config/routes.rbを見ればいいのですが、見てもよくわからない。
Rails.application.routes.draw doコメントアウトされている行を抜かせばこの3行しか無い。要はresourcesメソッドに:tasksを渡せばその辺はCRUDが実現できるようにうまくやっといてあげる、ということらしいです。
resources :tasks
end
ところでこのコロンは何だい?シンボル?理解し難いね…。
参考:[Rails]Rubyのカベ-シンボルって何だ?
HTTPメソッドのGET/POST/PUT/DELETEがshow/create/update/destroyアクションに対応していて、RESTfulな考え方をベースに実現されている。逆に言えばRESTfulを意識して開発するとRailsの恩恵を受けやすく、わかりやすい構造になる、と。わかりにくいよ!
0 件のコメント:
コメントを投稿