Program LOG

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

初めてのruby開発 - 一覧表示・登録開発編

前回はモデルの作成、コントローラーの作成を行いました。
また、ルーティングの設定までを行いましたので、
今度は、実際にコントローラーにメソッドを作成し、ビューをつけていきたいと思います。
装飾に関しては、放置でw

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

rails console

まずは、トップページを作成してみようと思います。
作成するにはテスト的にデータが必要となりますので、以下の管理コマンドを使用して
登録していきたいと思います。

[vagrant@localhost simplebbs]$ rails console
Loading development environment (Rails 4.1.0)
irb(main):001:0> Bbs.create(title: "testTitle",body: "testBody",username: "takumi", deletepwd: "pwd")
   (0.1ms)  BEGIN
  SQL (45.6ms)  INSERT INTO `bbs` (`body`, `created_at`, `deletepwd`, `title`, `updated_at`, `username`) VALUES ('testBody', '2014-04-29 05:23:49', 'pwd', 'testTitle', '2014-04-29 05:23:49', 'takumi')
   (8.8ms)  COMMIT
=> #
irb(main):002:0> Bbs.create(title: "testTitle2",body: "testBody2",username: "takumi", deletepwd: "pwd", resid: "0")
   (0.3ms)  BEGIN
  SQL (0.5ms)  INSERT INTO `bbs` (`body`, `created_at`, `deletepwd`,`title`, `updated_at`, `username`) VALUES ('testBody2', '2014-04-29 05:25:34', 'pwd', 'testTitle2', '2014-04-29 05:25:34', 'takumi')
   (8.4ms)  COMMIT
=> #

rails consoleはrailsを簡単に実行テストできるツールとなります。
便利なのでちょいちょいテストでは使いたいと思います。

一覧ページの作成

先ほど登録したデータを取得して、一覧表示します。
まずはモデルから情報を取得するのですが、bbs_controller.rbファイルを編集していきます。

  def index
    @bbsitem = Bbs.all
  end

モデルから全ての情報を取得するにはこれでいいらしいので、そう指定しました。
実際には、10件だけ取得したいので、以下のようにしました。

  def index
    @bbsitem = Bbs.order("created_at DESC").limit(10)
  end

次にビューを作成していきます。
ビューは「app/views/bbs/」の中にファイルを作成します。
今回はindexメソッドに対するviewなので「index.html.erb」として作り、以下のコードを挿入しました。

<table>
  <tr>
    <td>タイトル</td>
    <td>名前</td>
    <td>登録日</td>
    <td>--</td>
  </tr>
  <% @bbsitem.each do |v| %>
  <tr>
    <td><%= link_to v.title, "/bbs/show/#{v.id}" %></td>
    <td><%= v.username %></td>
    <td><%= v.created_at.strftime("%Y年%m月%d日") %></td>
    <td><%= link_to "編集", "/bbs/update/#{v.id}" %>:<%= link_to "削除", "/bbs/delete/#{v.id}" %></td>
  </tr>
  <% end %>
</table>

これで、ブラウザから「simplebbs.net」へアクセスすれば先ほど登録したテストデータが表示されているはずです。
無事に確認できたら、次は各種共通ページを修正しておきたいと思います。

layoutsを変更してみよう!

Bodyタグの中身を以下のように設定しました。

<h1>SimpleBBS</h1>
<%= yield %>
<br><br>
<%= link_to "HOME" , "/" %> | <%= link_to "新規登録" , bbs_create_path %> 

<%= yield %>にはviewで設定したものが挿入されます。
先ほどはスルーしましたが、その他に「link_to」というのがあります。
Railsには、リンクヘルパーなるものが存在しています。
実際に出力される際には、以下のようになっています。

<a href="/">HOME</a> | <a href="/bbs/create">新規登録</a> 

link_toの後に「リンク名」を入れ、その後に「遷移先」を指定すると、アンカーを自動的に設定してくれます。
また、その次の指定に関しては、ルーティングで設定された「Prefix」を指定する事も出来ます。
これで装飾は除いて、一覧表示が出来ました。
ってか、すごい簡単。。。ちょっと感動w
みんながRubyって連呼する理由が少し分かって来ましたw

登録画面を作ってみる!

さて、一覧が出来たので、登録画面を作成してみたいと思います。
基本的には、登録画面を作成して、バリデーションを通して、エラーが無い場合はDBへ登録し、
completeページへ遷移するといった流れになります。

まずは、一覧の時と同様で、bbs_controller.rbファイルを編集します。

  def create
    @bbs = Bbs.new
  end

上記を追記しました。
また、同時に「app/views/bbs/」の中に「create.html.erb」ファイルを作成し、
下記のように、追記しました。

<%= form_for @bbsitem, :url => {:action => 'create'} do |f| %>
<table>
  <tr>
    <td>タイトル</td>
    <td>
      <%= f.text_field :title  %>
    </td>
  </tr>
  <tr>
    <td>投稿者</td>
    <td>
      <%= f.text_field :username  %>
    </td>
  </tr>
  <tr>
    <td>本文</td>
    <td>
      <%= f.text_area :body  %>
    </td>
  </tr>
  <tr>
    <td>削除パスワード</td>
    <td>
      <%= f.password_field :deletepwd  %>
    </td>
  </tr>
</table>
<%= f.submit:登録 %>
<% end %>

次回以降にsessionを用いて確認画面を作ったり、実際にデータをセーブしてみたりと
実際に登録、また詳細情報の取得と表示を行って生きたいと思います。
基本的なプログラミングの概念はPHPの時とほとんど変わりませんが、
実装がかなり楽な印象を受けました。
かなりいい機会なので、実用的な実装を施して、サンプル掲示板を作っていきたいと思います。

使用環境