初めてのruby開発 - 機能概要・Railsキホンのキ編
chefを勉強しようと思ったのですが、一通りの開発環境構築が終わりましたので、
ここいらで、開発環境構築は一区切りして、Ruby on Railsの勉強に移りたいと思います。
今回は、作成したい機能概要と、簡単なrailsコマンドを実行して、基本的な所を勉強していきたいと思います。
目次を作成しました!以下のページへ!
初めてのruby開発 - 目次 - Program LOG
参考にしたサイト
ルーティング(routes) - Railsドキュメント
#06 rails db/rails consoleを使おう | Ruby on Rails 4入門 - プログラミングならドットインストール
作りたい機能
- 一覧画面
- 登録されている内容が一覧表示されること。
- 詳細ページに遷移できること。
- 登録ページへの遷移が出来る事。
- 編集ページへの遷移が出来る事。
- 削除ページへの遷移が出来る事。
- 詳細ページ
- 登録内容が表示される事。
- 登録画面
- タイトル、本文、ユーザー名、削除パスワードが入力できること。
- 全項目未入力でエラーになる事。
- 登録確認ページが表示される事。
- 編集画面
- 登録時と同じ内容。
- 削除画面
- 削除確認ページが表示される事。
- 削除パスワード入力で登録されているパスワードが一致していれば削除が出来る事。
ざっくり言うとこんな感じの機能を実装したい。
scaffoldを使えば簡単に作れるのであろうが、今回はMVCをきっちり作成して、
まずはRailsになれる事が大事!
エンドポイントの定義(サイトマップ)
最初にエンドポイントの定義をしておこうと思います。
- simplebbs.net/
- GET / (一覧画面)
- GET /bbs/create (登録画面)
- POST /bbs/create_confirm (登録確認画面)
- POST /bbs/create_complete (登録完了画面)
- GET /bbs/update/:id (編集画面)
- PATCH /bbs/update_confirm/:id (編集確認画面)
- PATCH /bbs/update_complete/:id (登録完了画面)
- GET /bbs/delete/:id (削除確認画面)
- DELETE /bbs/delete_complete/:id (削除完了画面)
- GET /bbs/show/:id (詳細画面)
こんな感じかな?そんなページは必要じゃないですね。
データベースも1種類あれば出来ちゃうので、
正規化したりするには、取り合えずここまで作ったら、次回以降アップデートって感じで
作っていこうかと思います。
データの定義
- bbsテーブル
- id (intger:PK)
- title (string:タイトル)
- body (text:本文)
- username (string:ユーザー名)
- deletepwd (string:削除パスワード)
- created_at(datetime:登録日)
- updated_at(datetime:編集日)
初めてのgenerate!
generateコマンドを実行すると、コントローラー、モデル、ビューを作ってくれる便利コマンドらしいです。
まずは、モデルから作っていきたいと思います。
モデル名の頭文字は大文字で、単数系のみらしいです。
idとcreated_at、updated_atは勝手に作ってくれるので不要です。
さっそく作っていきたいと思います。
[vagrant@localhost simplebbs]$ rails generate model Bbs title:string body:text username:string deletepwd:string resid:integer invoke active_record create db/migrate/20140429024536_create_bbs.rb create app/models/bbs.rb invoke test_unit create test/models/bbs_test.rb create test/fixtures/bbs.yml
完成したっぽいです。
作成されたファイルを確認しておきたいと思います。
モデルを作成すると、「migrate」ファイルが作成されます。
マイグレーションとは、実際にデータベースを作成、変更してくれる仕組みです。
早速実行したいと思います。
[vagrant@localhost simplebbs]$ rake db:migrate == 20140429024536 CreateBbs: migrating ======================================== create_table(:bbs) > 0.5017s == 20140429024536 CreateBbs: migrated (0.5018s) ===============================
Bbsというテーブルを作成してくれています。
phpMyAdminで確認した所正常に「bbs」というテーブルが作成されており、
型なども自動的に作成されていました。
マイグレーションファイルを確認しておくといいと思います。
どのように指定してあり、こうゆう結果が出たのかが分かるだけでも面白いです。
というか。。。rails今の時点でもかなり便利ですな・・・w
便利ついでにもうひとつ紹介しておこうかと思います。
[vagrant@localhost simplebbs]$ rails db Enter password: Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 38 Server version: 5.5.37 MySQL Community Server (GPL) by Remi Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show tables;
Tables_in_simplebbs_dev |
bbs |
bbs_tests |
schema_migrations |
このコマンドを実行するだけで、mysqlに接続する事ができます。
よく使いそうなので、紹介しておきましたw
コントローラーを作ってみる
さて、モデルが完成したので、同じく「generate」を使用して、コントローラーを作っていきます。
generateコマンドは「g」で代用できるみたいなので、今回はそのようにしてみました。
[vagrant@localhost simplebbs]$ rails g controller Bbs create app/controllers/bbs_controller.rb invoke erb create app/views/bbs invoke test_unit create test/controllers/bbs_controller_test.rb invoke helper create app/helpers/bbs_helper.rb invoke test_unit create test/helpers/bbs_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/bbs.js.coffee invoke scss create app/assets/stylesheets/bbs.css.scss
コントローラーが作成され、viewフォルダの中にbbsというフォルダが作成されました。
それ以外に関してはまだよく分かりません。。。w
scssやcoffeに関しては若干知識がありますが、それ以外はなんとも・・・w
ルーティングの定義
ルーティングとはURLとアプリケーションのパラメータを結びつける仕組みです。
「config/routes.rb」ファイルを修正していくことで定義する事ができます。
最初はサンプルが大量にコメントアウトされている状態です。
前回のscaffoldやhelloworldのルーティングが記載されていると思いますが、
まずはそいつらは削除して、一からきちんと定義していきたいと思います。
RESTfulなURLを自動生成するには以下のコードを記載すればいいです。
resources :bbs
ルーティングを確認するには以下のコマンドを使用します。
[vagrant@localhost simplebbs]$ rake routes Prefix Verb URI Pattern Controller#Action bbs GET /bbs(.:format) bbs#index POST /bbs(.:format) bbs#create new_bb GET /bbs/new(.:format) bbs#new edit_bb GET /bbs/:id/edit(.:format) bbs#edit bb GET /bbs/:id(.:format) bbs#show PATCH /bbs/:id(.:format) bbs#update PUT /bbs/:id(.:format) bbs#update DELETE /bbs/:id(.:format) bbs#destroy
ただし、これだと思ったとおりにはなりませんので、独自で設定する必要があります。
今回は以下のように設定しました。
root 'bbs#index' #GET /bbs/create (登録画面) get 'bbs/create' => 'bbs#create' # POST /bbs/create (登録エラー画面) post 'bbs/create_confirm' => 'bbs#create_confirm' #GET /bbs/create_complete (登録完了画面) post 'bbs/create_complete' => 'bbs#create_complete' #GET /bbs/update (編集画面) get 'bbs/update/:id' => 'bbs#update' #patch /bbs/update (編集画面) patch 'bbs/update_confirm/:id' => 'bbs#update_confirm' #patch /bbs/update_complete (登録完了画面) patch 'bbs/update_complete/:id' => 'bbs#update_complete' #GET /bbs/delete/:id (削除確認画面) get 'bbs/delete/:id' => 'bbs#delete' #GET /bbs/delete_complete/:id (削除完了画面) delete 'bbs/delete_complete/:id' => 'bbs#delete_complete' #GET /bbs/show/:id (詳細画面) get 'bbs/show/:id' => 'bbs#show'
ルーティングの確認は以下の通りです。
[vagrant@localhost simplebbs]$ rake routes Prefix Verb URI Pattern Controller#Action root GET / bbs#index bbs_create GET /bbs/create(.:format) bbs#create bbs_create_confirm POST /bbs/create_confirm(.:format) bbs#create_confirm bbs_create_complete POST /bbs/create_complete(.:format) bbs#create_complete GET /bbs/update/:id(.:format) bbs#update PATCH /bbs/update_confirm/:id(.:format) bbs#update_confirm PATCH /bbs/update_complete/:id(.:format) bbs#update_complete GET /bbs/delete/:id(.:format) bbs#delete POST /bbs/delete_complete/:id(.:format) bbs#delete bbs_delete_complete DELETE /bbs/delete_complete/:id(.:format) bbs#delete_complete GET /bbs/show/:id(.:format) bbs#show
ルーティングの設定が完了しました。
次回は、実際にコーディングしていこうと思います。
使用環境
- ホストOS: Windows7 x64
- VirtualBox: 4.3.10
- Vagrant: 1.5.2
- ゲストOS: CentOS6.4 x64
- Ruby : 2.0.0-p451
- Ruby on Rails : 4.1.0
- passenger : 4.0.41
- apache : 2.2.15
- NetBeans IDE 8.0