改訂新版 基礎Ruby on Rails 追加HINT集

2012/03/07

読者サポートページに戻る

SQLite3とMySQL、PostgreSQL

SQLite3とMySQL、PostgreSQLについて、本書の記述はいまいち意図がつかみにくいようですので、改めて説明します。

SQLite3は、おもにデスクトップアプリケーション用に使われているDMBSです。サーバー上でRailsを使ったウェブアプリケーションを公開するときは、ふつうSQLite3は使いません。パソコン上でRailsを学習するときには、準備が楽ですし、機能も十分なので、SQLite3がおすすめです(昔ながらの簡単な掲示板くらいなら、SQLite3をサーバー上で使ってもいいかもしれません)。

MySQLやPostgreSQLは、サーバー上で使われる本格的なDBMSです。学習用や自分の趣味のためではなく、一般向けに公開するアプリケーションを作るときに使います。本番環境でMySQLやPostgreSQLを使うときは、パソコン上の開発環境もMySQLやPostgreSQLに合わせます。MySQLやPostgreSQL独自の機能を利用することが多いからです。

WindowsにMySQLをインストールする手順は、本書の付録Bにあります。WindowsにPostgreSQLをインストールする方法、およびMacにMySQLやPostgreSQLをインストールする手順は、ただいま準備中です。

Ruby 1.9.2での文字化け

Windowsのコマンドプロンプトで、UTF-8の文字が文字化けせずに表示されるようになったのは、Ruby 1.9.3からです。Ruby 1.9.2を使っている方は、Chapter2のサンプルを実行すると漢字やひらがなが文字化けします。本書を読み進めるうえでは、Ruby 1.9.3を使うようにしてください。

テーブル名と主キー名の設定

既存のデータベースをあとからRailsで利用するときには、テーブルや主キーの名前がRailsの規約に沿っていないことがあります。そうしたときは、モデルクラスでテーブル名や主キーの名前を指定できます。
テーブル名を指定するには、self.table_name = テーブル名とします。たとえば、会員用のテーブル名が単数型のmemberであるときは、次のようにします。

class Member < ActiveRecord::Base
  self.table_name = "member"

主キー名を指定するには、self.primary_key = 主キーのカラム名とします。主キーのカラム名がnoであるときは、次のようにします。

class Member < ActiveRecord::Base
  self.primary_key = "no"

なお、Railsの古いバージョンでは、テーブル名や主キー名を設定するのにset_table_nameメソッドやset_primary_keyメソッドを使っていましたが、そうしたメソッドはRails 3.2からは廃止予定となりました。

LoadError

学習中にLoadError in TopController#aboutのようなエラーメッセージに遭遇することがあるかもしれません。おそらく、その下には次のような説明も表示されているでしょう。

Expected C:/Users/taro/rails/asagao/app/controllers/top_controller.rb to define TopController

これはtop_controller.rbTopControllerというクラスを定義していない、ということを意味しています。本来、このファイルは次のような構成になっていなければなりません。

class TopController < ApplicationController
  def about
    ...
  end

  ...
end

class ... endの間でaboutメソッド(アクション)を定義しているかどうか、TopControllerの綴りが合っているかどうか確認し、必要に応じて修正してください。