以前に書いた Ruby on Railsで一行掲示板を作成する をRuby on Rails 1.2用に書き直しました。
データベースの作成
MySQLを使用して、データベースとテーブルを作成する。
データベースを作成。
mysqladmin -uroot create bbs_development
mysqladmin -uroot create bbs_test
mysqladmin -uroot create bbs_production
ここでテーブルは作成しない。
プロジェクトの作成
C:\railsディレクトリを作成する。
C:\railsディレクトリに移動して、次のコマンドを実行する。
rails bbs
cd bbs
C:\rails\bbs\config\database.ymlのusernameやpasswordを編集する。
MySQLのバージョンが4.0以前の場合は「encoding: utf8」を削除する。
development:
adapter: mysql
database: bbs_development
username: root
password:
host: localhost
encoding: utf8
test:
adapter: mysql
database: bbs_test
username: root
password:
host: localhost
encoding: utf8
production:
adapter: mysql
database: bbs_production
username: root
password:
host: localhost
encoding: utf8
モデルとコントローラを作成する。
ruby script/generate model item
ruby script/generate controller item
テーブルの設計
C:\rails\bbs\db\migrate\001_create_items.rb を編集する
class CreateItems < ActiveRecord::Migration
def self.up
create_table :items do |t|
t.column :name, :text #投稿者名
t.column :body, :text #本文
end
end
def self.down
drop_table :items
end
end
マイグレーションの実行
rake db:migrate
itemsテーブルが作成される。
エラーが発生した場合は、
- db/migrate/001_create_items.rbを確認する。
- config/database.ymlを確認する。
コーディング
C:\rails\bbs\app\views\item\index.rhtml ファイルを作成する。
ファイルの文字コードはUTF-8。
index.rhtmlでは、投稿された内容が配列で @items に入り、 @items.each do ~ end で、投稿内容を出力する。 フォームで入力された内容は、コントローラの add_item メソッドで処理をする。
<?xml version="1.0"?>
<!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="ja-JP" lang="ja-JP">
<head>
<title>一行掲示板</title>
</head>
<body>
<h1>一行掲示板</h1>
<dl>
<% @items.each do |@item| %>
<dt><%=h @item.name %></dt>
<dd><%=h @item.body %></dd>
<% end %>
</dl>
<hr />
<%= form_tag :action=>"add_item" %>
名前:<%= text_field("new_item", "name", "size"=>10) %><br />
本文:<%= text_field("new_item", "body", "size"=>60) %><br />
<input type="submit" value="Add" />
</form>
</body>
</html>
C:\rails\bbs\app\controllers\item_controller.rb を開く。
class ItemController < ApplicationController
def index
@items = Item.find(:all)
end
def add_item
item = Item.new
item.attributes = @params["new_item"]
if item.save
redirect_to(:action => "index")
else
render_text "Couldn't add new item"
end
end
end
Webサーバーを起動する。
ruby script/server
http://localhost:3000/item/にアクセスする。
掲示板が表示されたら、成功。