2011年8月5日金曜日

Rails3を初歩から学ぶ #2 モデルをつくる

この一連のエントリは
Ruby on Rails 3 Tutorial: Learn Rails by Example (Addison-Wesley Professional Ruby Series)
で参考に学んだことを凝縮してお送りしています。


前準備は終わったので今回はモデルをつくってみます。
まずはユーザー情報を管理するUserモデルをつくるのだ。
スキーマを下表に示します。
★idinteger
namestring
encrypted_passwordstring
saltstring
adminboolean
★created_atdatetime
★updated_atdatetime
「★」マークのデータはmigrationしたときにRailsによって自動的に付加される列です。
「name」はユーザー名、「encrypted_password」は暗号化したパスワード、「salt」は暗号化時にパスワードに付加する値、「admin」は管理者権限を表します。

ではつくってみましょう。
rails generate model User name:string encrypted_password:string
salt:string admin:boolean
※実際は一行
migrationファイルが出来ているのでエディタで開きます。

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.string :name
      t.string :encrypted_password
      t.boolean :admin, :default => false
      t.timestamps
    end
  end
  def self.down
    drop_table :users
  end
end
rake db:migrate
admin権限はデフォルトでfalseにしておきたいので赤字の部分を追加します。
おっと「salt」を忘れていました。追加しましょう。既存のモデルに追加する場合はmigrationファイルを生成します。
rails generate migration add_salt_to_users salt:string
一応生成されたファイルを確認してみましょう。db/XXXX_add_salt_to_users.rbをひらきます。
class AddSaltToUsers < ActiveRecord::Migration
  def self.up
    add_column :users, :salt, :string
  end
  def self.down
    remove_column :users, :salt
  end
end
「add_column」メソッドでusersテーブルにstring型のsalt列を追加していることが分かります。これを反映しましょう。
rake db:migrate
rake db:test:prepare
RSpecの検査でも有効になるよう「rake db:test:prepare」を実行しておきます。
さて、ここで意図した通りのテーブルが出来ているか確認してみましょう。
rails dbconsole
sqlite> .tables
-->schema_migrations users
sqlite> .schema users
-->CREATE TABLE "users" ("id" INTEGER 〜(省略)〜);
「rails dbconsole」を実行するとDBと接続したコンソールが起動します。
ターミナルに「sqlite>」と表示されるのでsqlite3のコマンドを入力します。
「.tables」と入力すると作成したテーブルの一覧が確認できます。
「users」が先ほど作成したテーブル、「schema_migrations」はRailsが「rake db:migrate」でどこまで反映したかを管理するためのテーブルです。
「.schema users」でusersテーブルの中身を確認すると、さきほど指定したスキーマの通りになっているかどうか確認できます。




0 件のコメント:

コメントを投稿