Ruby on RailsにおけるView

どうもこんばんは、south37です。
今日はもりもりviewについて書いていきたいと思います。
ただ、今日はあんまり夜更かし出来ない日なので、さくっといかせていただきますね。。。

MVCにおけるview

さて、viewについてです。Ruby on RailsMVC型のWebアプリケーションフレームワークと呼ばれる事は以前説明しました。そのmodelとcontrollerを終え、いよいよ今回はviewとなります。viewはUI的な部分を相当する概念な訳ですが、特にWebアプリケーションなんかだとhtml, js, cssらへんに相当します。railsにおいては、erbと呼ばれるテンプレートファイルをレンダリングしてhtmlを作成し、scssでcssを、coffee scriptでjavascriptを記述していきます。デフォルトのツールがけっこうクールな感じになってますね。

今回は特に、テンプレートファイルについて説明したいと思います。erbはrubyの標準添付ライブラリで、簡単に言うとファイルの中にrubyのコードを埋め込めます。
例えば、controllerで

@comments = Comment.all

みたいな感じでインスタンス変数を作っとくと、viewでは

<h1>Listing comments</h1>

<table>
  <tr>
    <th>Message</th>
  </tr>

<% @comments.each do |comment| %>
  <tr>
    <td><%= comment.message %></td>
  </tr>
<% end %>
</table>

みたいにその変数を使ってhtmlファイルが書けます。まあそのまんまですね。ちなみに、<%で囲まれてるとこがrubyコードです。comment.messageってやってるとこでcomment modelのmessageプロパティが出力されてます。

ただ、erbでhtmlファイル作成する場合って結局自分でタグをゴリゴリ書くので、あんまクールでは無いんですよね。代わりになりそうなかっこいいテンプレートエンジンとしては、slimってのがあります。
なんでも、

doctype html
html
  head
    title Slim Examples
    meta name="keywords" content="template language"
    meta name="author" content=author
    javascript:
      alert('Slim supports embedded javascript!')

  body
    h1 Markup examples

    #content
      p This example shows you how a basic Slim file looks like.

      == yield

      - unless items.empty?
        table
          - for item in items do
            tr
              td.name = item.name
              td.price = item.price
      - else
        p
         | No items found.  Please add some inventory.
           Thank you!

    div id="footer"
      = render 'footer'
      | Copyright © #{year} #{author}

みたいな感じでhtmlファイルが書けちゃうらしいです。最近流行の、インデントが意味を持つ系のやつです。閉じタグが必要なく、かつ見た目と構造が完全に対応するので、クールですね。自分のプロダクトに使った事は無いんですが、いつか使おうと思っています。

で、結局slimを宣伝しただけになっちゃいましたが、今回はここまでにしときます。実は、railsにはview用の便利なメソッドがいっぱいあったり(formが簡単に作れるとか)、部分テンプレートという便利な機能があったり、scssやcoffeeという超クールなものを使っていたりする訳ですが、そのへんの説明はおいおいしていこうと思います。ではでは、おやすみなさい