ユーザ管理テーブルではいきなり変則的なモデルの作り方をしてしまいましたが、次は「普通」に発言を管理するStatusテーブルを作ってみます。
まず、次のコマンドを打ち込んでmodelとmigrationのファイルを自動生成します。
% script/generate model status
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/status.rb
create test/unit/status_test.rb
create test/fixtures/statuses.yml
exists db/migrate
create db/migrate/002_create_statuses.rb
そして、生成された db/migrate/002_create_statuses.rb を編集し、Statusesテーブルに必要なカラムを書き加えます。
class CreateStatuses < ActiveRecord::Migration
def self.up
create_table :statuses do |t|
t.column :user_id, :integer
t.column :status, :text
t.column :created_at, :datetime
t.column :updated_at, :datetime
end
end
def self.down
drop_table :statuses
end
end
user_idはユーザ管理テーブルとの関連用、statusが発言内容を格納するカラムです。user_id という名称には「Userクラスのidをキーとして関連する」という意味があります。また、created_at、updated_at というのはRailsでは特殊な意味があり、エントリの作成日時/更新日時を自動的に保存してくれるというものです。
以上を追記した後、
% rake db.migrate
を実行すると、statusesテーブルが生成されます。
次に、User - 1:n -> Status という関連を示すために、モデル部分に追記を行います。
app/models/status.rb に次のように belongs_to メソッドを追記し、userと関連することを示します。
class Status < ActiveRecord::Base
belongs_to :user
end
逆に、app/models/user.rb には次のように has_many メソッドを追記します。
class User < ActiveRecord::Base
has_many :statuses, :dependent => :destroy
...
認証用に自動生成したので既にいろいろ入っていますが、適当な場所に書きます。
なお、belongs_to のあとは単数系、has_many のあとは複数形で書きます。英語的に読むと自然ですが、ちょっとややこしい…。また、 :dependent => :destroy と書いておくと、Userを削除した際に、関連するStatus(es)も削除してくれます(デフォルトでは残ってしまう)。
とりあえず、ここまでで各ユーザが発言した内容(複数)を管理するためのモデルが出来上がりました。
理解すべきことは非常にたくさんありますが、多分まだ10行ちょっとしか書いてません。
でも、まだ発言の追加・削除はもちろん、表示も出来ません*1。というわけで、次はコントローラ、ビューを作っていきます。