Program LOG

勉強した内容をまとめ中。。。間違ってたら教えて。。。

初めてのruby開発 - 機能概要・Railsキホンのキ編

chefを勉強しようと思ったのですが、一通りの開発環境構築が終わりましたので、
ここいらで、開発環境構築は一区切りして、Ruby on Railsの勉強に移りたいと思います。
今回は、作成したい機能概要と、簡単なrailsコマンドを実行して、基本的な所を勉強していきたいと思います。

目次を作成しました!以下のページへ!
初めてのruby開発 - 目次 - Program LOG

作りたい機能

  • 一覧画面
    • 登録されている内容が一覧表示されること。
    • 詳細ページに遷移できること。
    • 登録ページへの遷移が出来る事。
    • 編集ページへの遷移が出来る事。
    • 削除ページへの遷移が出来る事。
  • 詳細ページ
    • 登録内容が表示される事。
  • 登録画面
    • タイトル、本文、ユーザー名、削除パスワードが入力できること。
    • 全項目未入力でエラーになる事。
    • 登録確認ページが表示される事。
  • 編集画面
    • 登録時と同じ内容。
  • 削除画面
    • 削除確認ページが表示される事。
    • 削除パスワード入力で登録されているパスワードが一致していれば削除が出来る事。

ざっくり言うとこんな感じの機能を実装したい。
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
3 rows in set (0.00 sec)

このコマンドを実行するだけで、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

ルーティングの設定が完了しました。
次回は、実際にコーディングしていこうと思います。

使用環境