かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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]

が表示された!

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