RailsでWikiクローンを作る2.1
名前が気に入らない
だれか、いいキャッチください
始めに設計から
どんな設計をしたらいいのか数日悩んでしまいました。将来の複雑さに多少は耐えられる設計としたかったからです。
悩んだ末、悩まんでもいいんじゃないかっていう簡単な設計となりました。
モデル部分に、Wikiの投稿、編集、検索などを管理することに責務を持つ「wiki」クラスと、Wikiの1ページの状態を表し、ActiveRecordのサブクラスである「page」クラスです。
wiki ---> page << AcriveRecord
何はなくともデータベース
今回はMySQL(5.0)を使用してデータベースを作成していきます。
Railsは設定より規約を重視していていろいろと従わなければいけないことがあります。最初にデータベースを作ろうとしているのもこの規約に従うためで、Railsが含んでいるO/RマッピングライブラリのActiveRecordがデータベースのメタ情報(テーブル名やカラム名)を利用してマッピングをしています。
また、Railsはデータベースの作成に関してもうるさく規約で固められています。テーブルの名前は英語で複数形、つまり「s」を付けます(ちなみにpersonの複数形はpeople。マジ!?って感じ)、なおかつプライマリキーがカラム名「id」で自動インクリメント属性の整数値を格納するフィールドである方が都合がいいです。
今回作成するテーブルはこんな感じ。Wiki名と内容、そして作成日時を保存するだけのシンプルなものです。
テーブル名: pages
カラム名 | 型 | オプション | コメント |
---|---|---|---|
id | INTEGER | PRIMARY_KEY AUTO_INCREMENT | Railsの規約に従う |
name | VARCHAR(255) | NOT NULL | ページ名。Wikiではidではなくこのページ名でページの識別をする。 |
content | TEXT | NOT NULL | ページ内容。Wikiソースが入る。 |
created_at | TIMESTAMP | Railsが自動で作成日時をセットしてくれる。カラム名は「created_on」でもよい | |
updated_at | TIMESTAMP | Railsが自動で更新日時をセットしてくれる。カラム名は「updated_on」でもよい |