生涯未熟

生涯未熟

プログラミングをちょこちょこと。

RailsによるアジャイルWEBアプリケーション開発第2版勉強!#2

前回はURLからHello,Rails!が表示されるところまで進めました。
今回は動的なページの表示から始めていきたいと思います。



・動的なページの構築


動的なテンプレートの作成として2通りがある。

  1. Builderを使用し作成
  2. テンプレートにRubyを埋め込み作成

今回では2つ目のRubyを埋め込む方法で進めていく。
rhtmlという拡張子にしたのはこのためであり、RubyのERbというシステムを使用している。
上記システムでは<%= %>の間に記述されたものはRubyのコードとして実行、出力される。
さらに<% %>の間では、Rubyのコードの実行のみが行われる。
また、出力した文字列が特殊文字でページ表示の妨げになるのを防ぐためにh()というヘルパーメソッドも併用される。

動的なページのサンプルとして、時刻が表示されるページを作成します。

<html>
 <head>
  <title>Hello,Rails!</title>
 </head>
 <body>
  <h1>Railsからこんにちは!</h1>
  <p>
   現在の時刻は、<%= Time.now %>です。
  </p>
 </body>
</html>

これで現在時刻が「現在の時刻は、Mon Jun 21 21:08:06 +0900 2010です。」のように表示されました。
これよりもう少し簡単に表示出来るようにsay_controllerもイジってみます。

(classなど省略)
def hello
 @time = Time.now
end

そして、hello.rhtmlの方を

現在の時刻は、<%= @time %>です。

こうすることで、@timeというインスタンス変数に時刻を入れることによりview内でも表示出来るようになります。


・リンクによる複数ページの連携


リンクすることにより別のビューを展開する方法を学びます。
今回はそれぞれのビューに対応したアクションメソッドを定義する(定義せずに既存のものを使う場合もアリ)。
say_controllerにgoodbyeメソッドを追加し、views/say内にはgoodbye.rhtmlを作成する。

2つのページをつなげる方法としてviewの中にa href=・・・と挿入するのもいいが、ヘルパーメソッドという有用なものがあるので、その中のlink_toを用いる。

<%= link_to "さようなら!", :action => "goodbye" %>

これをview内に埋め込むことでgoodbye.rhtmlにリンクすることが出来ました。

actionの部分はシンボルと呼ばれており、コロンは
bold;">〜という名前をもつものを表しています。


ここで第4章は終了です。


・第5章〜 Depotアプリケーション



この章ではDepotというショッピングカートアプリケーションを作成します。
開発の進め方について色々読んだ後実際に動くものを作っていきます。

  • アプリケーション名をdepotとして作成

>rails depot -d mysql

  • 次にデータベースの設定

これはこちらを参照のこと。
データベース名はdepot_developmentに。

  • アプリケーションの設定

config/database.ymlについての各種パラメータ説明。

  1. adapterはデータベースの種類をRailsに通知。今回はMySQL
  2. databaseはデータベース名の指定。今回はdepot_database。
  3. usernamepasswordは読んで字のごとく。
  4. hostはデータベースを実行しているマシンをRailsに通知。
>rake db:migrate

と実行し、エラーが無ければデータベースとの連携が取れている。

  • Productsモデルとテーブルの作成

Productsテーブルを作成するのと同時にそれを使うProductsモデルも作成しなければいけません。
Railsにはデータベースに適用する変更を表すデータベースマイグレーションが定義でき、それによりスキーマとデータの両方を更新出来る。
詳しくは16章にて。

マイグレーションを用いて作成に掛かる。

>ruby script/generate model product

生成されたファイルの中で数字の羅列_create_products.rbがマイグレーションファイルです。
中身はこんな感じになっています。

class CreateProducts < ActiveRecord::Migration
  def self.up
    create_table :products do |t|

      t.timestamps
    end
  end

  def self.down
    drop_table :products
  end
end

upメソッドでマイグレーション適用、downメソッドで元に戻すってな感じです。
それではこれを改変していきます。

lass CreateProducts < ActiveRecord::Migration
  def self.up
    create_table :products do |t|
    t.column :title,        :string
        t.column :description,  :text
        t.column :image_url,    :string
      t.timestamps
    end
  end

  def self.down
    drop_table :products
  end
end

これらはそれぞれ3つの列を挿入しただけです。
簡単ですねー。

で、この変更したマイグレーションを適用していきます。

>rake db:migrate

本日はここまで、次からはコントローラを作成していきます。