Ruby on Rails 2.0 で ActiveScaffoldを使ってみる

Railsが新しくなったらしいので試してみる。ActiveScaffoldもRailsの2.0に対応しているんだかいないんだか情報が錯綜してるし。とりあえずよくある名刺管理アプリの作成。
環境はWinXPRuby 1.8.6、gem 0.9.5。

1.Railsのインストール

なにはなくともRails2.0インストール。いまだと2.0.2が入りました。

> gem install rails --include-dependencies

2.SQLiteのインストール

今回初めてSQLite使ってみたんですが、個人用にローカルPCで使うならMySQLよりも手軽で良い感じ。

http://www.sqlite.org/download.html から
 sqlite-3_5_4.zip (207.94 KiB)
 sqlitedll-3_5_4.zip (206.33 KiB)
を落として、展開後パスの通ったフォルダにコピー。


Rubyから使うためのライブラリもインストール

> gem install sqlite3-ruby

3.Railsプロジェクト生成

> rails cards -d sqlite3
> cd cards

4.ActiveScaffoldプラグインのインストール

ActiveScaffoldを入れるとデフォルトでも十分かっこいいViewになるので、自分の場合たいてい入れるようにしてます。


普通にActiveScaffoldを入れようとするとVer1.0.1がインストールされてしまい、これだとRails2.0に対応してないとのこと。以下のように1.1.0 RC1を入れる必要があります。

> ruby script/plugin install http://activescaffold.googlecode.com/svn/tags/1.1.0_rc1


vendor\plugins\1.1.0_rc1 を vendor\plugins\active_scaffold にリネーム。

5.Modelの生成

> ruby script/generate model card

6.DBの生成

db\migrate\001_create_cards.rb 編集。
Rails2.0の新機能でセクシー(?)に書いてみた。

class CreateCards < ActiveRecord::Migration
  def self.up
    create_table :cards do |t|
      t.primary_key     :id
      t.string          :name,          :null => false, :default => ''
      t.string          :kana, :post,                   :default => ''
      t.string          :name, :mail, :url,             :default => ''
      t.string          :phone, :cellular, :fax,        :default => ''
      t.string          :zip, :address, :memo,          :default => ''
      t.integer         :priority,                      :default => 3
      t.timestamps
    end
  end

  def self.down
    drop_table :cards
  end
end


生成実行。

> rake db:migrate

7.Controllerの生成

> ruby script/generate controller card


app\controllers\card_controller.rb 編集

class CardController < ApplicationController
       active_scaffold
       layout "card"
end

8.レイアウトの作成

app\views\layoutsに新規ファイルcard.html.erb作成。以下の内容にする。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
 <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
 <title>Cards: <%= controller.action_name %></title>
 <%= javascript_include_tag :defaults %>
 <%= active_scaffold_includes %>
</head>
<body>
<p style="color: green"><%= flash[:notice] %></p>
<%= yield  %>
</body>
</html>

9.サーバ起動

> ruby script/server

http://localhost:3000/card にアクセス。


できた。


表示項目等のカスタマイズはまた次回。