正誤表(初版:第1刷、第2刷)

29ページ 本文2行目
新しいファイル「ruby_test01.rb」
新しいファイル「test01.rb」

78ページ 実行結果13行目
購入日の日付がプログラム中のデータと異なっている。
購入日: 2005-01-20
購入日: 2005-02-02

130ページ BookInfoManagerクラスのコード15行目
コードが途中で切れている。このページのコードを元にex1201を作成している場合には同じ箇所を修正する。
15 @book_infos["Ooba
15 @book_infos["Ooba2006"] = BookInfo.new(

173ページ
「CSVファイルを使った蔵書管理アプリケーションの最終版(つづき)」のコードは、すでにex1601のコードに記載済みの部分。不要なので削除する。

210ページ
209ページから続くgemの実行結果のうち、210ページの先頭に続いている5行はsqlite3-rubyの実行結果を誤って掲載している。この5行は不要なので削除する。

213ページ 本文2行目
sqlite3.exe
sqlite3.dll

​​​​​​​

222ページ ex1910.rb
11行目の実行後、ステートメントハンドルの開放を忘れている。そのために222ページ後半に説明した実行時エラー「unable to close due to unfinalised statements (SQLite3::BusyException)」が発生していた。
09 # テーブルに登録されたデータを削除する
10 # deletet文の実行
11 dbh.execute("delete from products")
12 puts "all records are deleted."
09 # テーブルに登録されたデータを削除する
10 # deletet文の実行
11 # sthにexecuteメソッドが返すステートメントハンドルを保持
12 sth = dbh.execute("delete from products")
13 puts "all records are deleted."
14  
15 # ステートメントハンドルを解放する
16 # (本書上ではこの処理が抜けてエラーになっている)
17 sth.finish
または、
09 # テーブルに登録されたデータを削除する
10 # executeメソッドでレコードを削除するSQLを実行後、
11 # finishメソッドでステートメントハンドルを開放する
12 dbh.execute("delete from products").finish
13 puts "all records are deleted."
と修正する。
また、222ページ後半の実行時のエラーの記載を削除する。

228ページ 本文4行目
insert文を実行すると、
select文を実行すると、

​​​​​​​

270ページ ex2404.rb 41行目
末尾の以下のコードは不要なので削除する
41 #
42 #class TestCGI < WEBrick::CGI
43 #  def do_GET(req, res)
44 #    res["content-type"] = "text/plain"
45 #    ret = "hoge\n"
46 #    res.body = ret
47 #  end
48 #end
49 #
50 #TestCGI.new.start() 

​​​​​​​

308ページ bookinfo_web.rb
Webアプリケーション版蔵書管理アプリケーションでエンコーディングエラーが発生する。
5 require 'rubygems'
6 require 'dbi'
エンコーディングエラー対策のパッチを追加する
(enc_patch.rbは、「ダウンロード」から入手し、bookinfoフォルダに配置する)。
5 require 'rubygems'
6 require 'dbi'
7 # sqlite-rubyが返すencodingへの対策
8 require 'enc_patch'

​​​​​​​

311ページ list.erb 43,44行目
operationと書くところをoparationと書いている (それぞれ紙面上は1行)。
43 <td><input type="radio" name="oparation" value=<%="#{val}.delete"%> /></td>
44 <td><input type="radio" name="oparation" value=<%="#{val}.edit"%> /></td>
43 <td><input type="radio" name="operation" value=<%="#{val}.delete"%> /></td>
44 <td><input type="radio" name="operation" value=<%="#{val}.edit"%> /></td>

​​​​​​​

313ページ book_info.rbの11行目
operationと書くところをoparationと書いている (紙面上は1行)。
11 if /(.*)\.(delete|edit)$/ =~ req.query['oparation']
11 if /(.*)\.(delete|edit)$/ =~ req.query['operation']

​​​​​​​​​​​​​​

328ページ retrieved.erbの54,55行目
operationと書くところをoparationと書いている (それぞれ紙面上は1行)。
54 <td><input type="radio" name="oparation" value=<%="#{row[name]}.delete"%> /></td>
55 <td><input type="radio" name="oparation" value=<%="#{row[name]}.edit"%> /></td>
54 <td><input type="radio" name="operation" value=<%="#{row[name]}.delete"%> /></td>
55 <td><input type="radio" name="operation" value=<%="#{row[name]}.edit"%> /></td>