Ruby on RailsにおけるView
どうもこんばんは、south37です。
今日はもりもりviewについて書いていきたいと思います。
ただ、今日はあんまり夜更かし出来ない日なので、さくっといかせていただきますね。。。
MVCにおけるview
さて、viewについてです。Ruby on RailsはMVC型の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という超クールなものを使っていたりする訳ですが、そのへんの説明はおいおいしていこうと思います。ではでは、おやすみなさい