かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

RailsのController部とView部を触り始める

さて、Ruby on Rails!!
この間はscaffoldを作って満足して終わった。
これをベースにごちょごちょ弄くってるだけでも、それっぽいサイトは出来そうな感じになってる。

でも、やっぱ色々使いこなしたいよね?ってことでActiveRecordは使わないで純粋にViewとControllerの部分に絞って入門してみる。
とりあえず適当なフォルダで

$ rails controller_view_study

と打ち込んでプロジェクトを作成する。

別のプロンプトを立ち上げて、

$ cd controller_view_study
$ ruby script/server

とやってサーバを起動する。

http://localhost:3000にアクセスして、開発サーバがちゃんと起動してるかどうかを確認!
ここまで数分で終わるね!

コントローラを作ろう

とりあえずコントローラを作る。
プロジェクトのフォルダへ移動してgenerateスクリプトでtopという名前のコントローラを作る。

$ ruby script/generate controller top

そうするとapp/controllerにtop_controller.rbが出来上がってる。
これがコントローラだ。
ブラウザでhttp://localhost:3000/topにアクセスしてみると…

Unknown action
No action responded to index

と言われてしまう。
indexってアクションが無いよ!!!ということだね。
アクションってのは要はpublicなメソッドです。
追加しちゃいましょう。

TopController.rb

class TopController < ApplicationController
  def index
  end
end

これでhttp://localhost:3000/topにアクセスしてみよう。
いい忘れてたけど、http://localhost:3000/tophttp://localhost:3000/top/indexと同じことみたい。


今度は、下みたいなメッセージが出てくる。

Template is missing
Missing template ./script/../config/../app/views/top/index.rhtml

アクションの次はtemplateが無いって。
app/views/top/index.rhtmlを作ればいいのか。
早速作る!!
中身は下の通り。単純なHello worldです。

<html>
  <head>
    <title>index</title>
  </head>
  <body>
    <h1>Hello world</h1>
  </body>
</html>

これでhttp://localhost:3000/topにアクセス!

出た出た!

Hello world

って出ました。

このrhtmlっていうのがviewにあたるみたい。
そんでもって、viewとコントローラはフィールドを共有してる。
ということで、top_controller.rbとindex.rhtmlを下のように書き換えてみた。
top_controller.rb

class TopController < ApplicationController
  def index
    @message = "Hello world [#{Time.now}]"
  end
end

index.rhtml

<html>
  <head>
    <title>index</title>
  </head>
  <body>
    <h1><%= @message %></h1>
  </body>
</html>

@messegeというフィールドにHello world 今の時間という文字列を入れている。
index.rhtmlのほうでは@messageの中身を参照してメッセージを出力している。

ちなみに、<% %>で囲まれた所はRubyのコードが書ける。
ここらへんERBの文法らしいので後で勉強しよう。
<%= %>を使うと中の実行結果が出力される。


実行してみよう。

Hello world [Sun Jul 22 16:40:25 +0900 2007]

が表示された!

ちゃんと動いてるね。
今日はここまで。