参考にした記事URL一覧

前回に引き続き小学生でもわかるRuby on Rails入門 | OpenBookを参考にしているが、色々すっとばして16章から適当に確認しながら適当に実装する。

一覧表示

def index
  @events = Event.all
end

と書くとテーブルにあるデータ全て取ってくるらしい(DAOで良くある書式)。 ビューでは@eventsに対してループさせる必要があるので次のような書式になる。 app/views/events/index.html.erbを次のように書き換える

<h1>Events</h1>
<table class="table">
    <thead>
        <th>日時</th><th>イベント名</th>
    </thead>
    <% @events.each do |event| %>
        <tr>
            <td><%= event.date.strftime('%Y/%m/%d %H:%m') %></td>
            <td><%= event.name %></td>
        </tr>
    <% end %>
</table>

[http://0.0.0.0:3000/events/index]にアクセスすれば一覧が表示される。どこかのページでeachでなくeach_with_indexという書き方してるページあったけど、Rails4では動かなかった。 バージョン違い?

リンクを貼る

一覧と詳細を繋げたいので、リンクを貼る。link_toというのを使うらしい。 Rails - link_to の引数と展開の違いまとめ - Qiitaの「基本」を使えば今回は十分。上のerbを次のように書き換える

<h1>Events</h1>
<table class="table">
    <thead>
        <th>日時</th><th>イベント名</th><th>link</th>
    </thead>
    <% @events.each do |event| %>
        <tr>
            <td><%= event.date.strftime('%Y/%m/%d %H:%m') %></td>
            <td><%= event.name %></td>
            <td><%= link_to "詳細",:controller=>"events",:action=>"show",:eventid=>event.id %></td>
        </tr>
    <% end %>
</table>

controllerはコントローラー、actionはビュー?かどうか分からないけど、コントローラー内で定義してるメソッド、あとパラメーター名(eventid)はconfig/routes.rbで指定したパラメーター名が使用出来る(と思う)。とりあえずこう作ったけど、最終的にハッシュにした方がいいんだろな。

一覧の範囲を絞り込む

テーブルのデータ全部でなく、一部のデータに絞り込んで表示してみる。 日付のデータがあるので、今月のデータに絞り込んでみる。app/controllers/events_controller.rbを編集

  def index
      from = Time.now.at_beginning_of_month
      to = from+1.month
      @events = Event.all(:conditions=>["date>=? and date<=?",from,to],:order=>'date')
  end

ここらへんはActiveRecordで日付の範囲指定 - yo_waka's blogを参考にしながら適当に実装した。ActiveRecordは色んな表現方法があるのでどうしたもんかな。ただ、数字も何でもオブジェクトってのは面白い。