『基礎Ruby on Rails』 初版第1刷 正誤表

2008/03/07

弊社監修の『基礎Ruby on Rails』初版第1刷 (インプレスジャパン刊)の内容に誤りが見つかりましたので、正誤表を掲載いたします。特に重要な項目には★印を付しました。

その他の版・刷については正誤表一覧をご覧ください。

また、付録CD-ROMにおいて chapter3 ディレクトリの中身に一部欠落がございました。このディレクトリ全体をZIP形式でまとめましたので、次のリンクよりダウンロードしてください。

この正誤表のPDF版は次のリンクよりダウンロードできます。

読者の皆様さまにご迷惑をお掛けしたことを深くお詫びいたします。

なお、読者サポートページも合わせてご参照ください。

Chapter 1 イントロダクション

p.19 図の「M(モデル)」 誤 デーベース
正 データベース
p.21 第2段落 誤 美しいコードが書けるからRailsを選んだ
正 美しいコードが書けるからRubyを選んだ
p.33 コマンド入力例1の1行目 誤 C:¥Documents and Settings¥Taro>d:
正 C:¥Users¥Taro>d:
p.33 箇条書きの最後の項目 誤 uby on Rails本体
正 Ruby on Rails本体
p.35 下から2行目および1行目 (2ヶ所) 誤 Charactor
正 Character
p.35 下から1行目 誤 utf-8
正 utf8
p.38 コマンド入力例1の1行目 誤 C:¥Documents and Settings¥Taro>cd ¥
正 C:¥Users¥Taro>cd ¥
★ p.39 本文下から2行目 誤 …が表示されます。初期設定では…
正 …が表示されます。表示されない場合は、URLを「http://127.0.0.1:3000/」に変えてみてください。初期設定では…
★ p.42 コマンド入力例1の1行目 誤 C:¥rails¥test>
正 C:¥rails¥asagao>
★ p.42 第2段落の1行目 誤 フォルダmain¥app¥controllersを開いてみましょう。
正 フォルダapp¥controllersを開いてみましょう。
★ p.45 Hint 誤 すべて文字コードをUTF-8にしてください。
正 すべて文字コードをUTF-8(TeraPadをお使いの場合UTF-8N)にしてください。
★ p.45 下から4行目末尾 誤 main¥app¥controllersの下の...
正 app¥controllersの下の...
p.47 LISTの直前の行 誤 :aciton
正 :action

Chapter 2 Rubyの基礎を学ぼう

★ p.56 表の下から1行目の左列 誤 message::
正 Message
★ p.56 表の下から1行目の右列 誤 114ページ参照
正 111ページのHINT参照
p.60 表の下から2行目の右列 誤 NNは8進数
正 NNNは8進数
p.75 上から3行目 誤 言語やJava
正 C言語やJava
p.78 Hintの1-2行目 誤 ...必要はあません。...
正 ...必要はありません。...
★ p.128 Listの5行目 誤 elsif
正 else

Chapter 3 コントローラとビュー

★ p.156 ソースコード1の3行目 誤 end def
正 end
★ p.157 HINT「requestオブジェクト」の2行目 誤 request.remoteip
正 request.remote_ip
p.165 入力例 誤 script/generate
正 script¥generate
p.173 LISTのファイル名 誤 lesson_helper.rhtml
正 lesson_helper.rb
★ p.173 HINT「Timeクラス」の2行目 誤 t = Time(2007, 6, 28, 18, 15, 30)
正 t = Time.local(2007, 6, 28, 18, 15, 30)
p.177 LIST, RESULT およびソースコードの1行目 (3ヶ所) 誤 Powerd by
正 Powered by
p.177 本文の1行目 誤 app¥public¥images
正 public¥images
p.190 LIST 中央付近 誤 ...
</ul>
</div>
<% 3.times do |x| %>
...
正 ...
</ul>
<% 3.times do |x| %>
...
p.192 LISTのファイル名 誤 ...¥_menu_bar.rhtml)
正 ...¥_menu_bar.rhtml
p.193 LISTのファイル名 誤 ...¥application_helper.rb)
正 ...¥application_helper.rb
p.194 コマンド入力例 誤 C:¥rails¥club>ruby script¥server
正 C:¥rails¥asagao>ruby script¥server

Chapter 4 データベースとモデル

p.209 本文2行目 誤 CD-ROMのchapter4¥club¥lib¥tasksの下
正 CD-ROMのchapter4¥lib¥tasksの下
★ p.213 LIST の2-3行目 誤 def self.up
    t.column :member_number, :integer,
正 def self.up
  create_table :members do |t|
    t.column :member_number, :integer,
p.225 コラム「scaffoldの利用」の入力例 誤 script/generate
正 script¥generate
p.225 コラム「scaffoldの利用」の入力例 誤 members
正 member
p.226 画面表示 誤 Editing members
正 Editing member
p.229 本文中央付近 誤 :conditionに指定できるのは
正 :conditionsに指定できるのは
p.235 サブセクション「7つのアクション」の2行目 誤 destory
正 destroy
p.239 1つ目のLISTのファイル名 誤 chapter4¥models¥member.rb
正 chapter4¥app¥models¥member.rb
★ p.243 LIST の1行目 誤 MembersController < ApplicationController
正 ApplicationController < ActionController::Base

Chapter 5 MVCの連携

p.270 1つ目のコードの3行目 誤 :message => '記入されていません。'
正 :message => 'が記入されていません。'
★ p.271 表の7行目「validates_inclusion_of」の「機能」 誤 値が範囲外であることを検証
正 値が範囲内であることを検証
★ p.271 表の8行目「validates_length_of」の「オプション」 誤 :maxmum
正 :maximum
★ p.278 第2段落の末尾 誤 …で囲みます。
正 …で囲み、直ちにCommonモジュールをincludeします。
★ p.278-279 1つ目のLISTの末尾 誤     (略)
    end
end
正     (略)
    end
  end

  include Common
end
p.279 サブセクション「Admin::MainController」の2行目 誤 Admin::MembersControllerと
正 Admin::MainControllerの
p.279 最も下の LIST (1-2行目) 誤 <% @page_title = '管理ページ' %->
<ul>
正 <% @page_title = '管理ページ' %->
<div id ="main">
<h1><%= h(@page_title) %></h1>
<ul>
p.279 最も下の LIST (末尾) 誤 </ul>
正 </ul>
</div>
★ p.282 LIST (下から2行目) 誤 { :method => :delete, ...
正 { :method => :post, ...
p.288 下から2行目 誤 Admin::MemberController
正 Admin::MembersController
p.291 1番目のLISTのファイル名 誤 chapter5¥club¥app¥...
正 chapter5¥app¥...
p.293 LISTの3行目 誤 :message => 'が間違っています。',
正 :message => 'の書式が不正です。',

Chapter 6 テスト

p.316 下から1行目 誤 body:Body
正 body:BODY
★ p.325 2番目のLIST (ページの最下行) 誤 @sets_expired_at = checked.to_i
正 @sets_expired_at =
  [true, 1, '1'].include?(checked)
★ p.326 本文1-2行目 誤 test_validation_on_expired_at1メソッドで
正 test_validation_on_expired_at2メソッドで
★ p.329 囲みの中のソースコード 誤 def self.current_articles(category)
正 def self.current_articles(place)
★ p.333 ソースコード2の2行目 誤 :id => 2,
正 { :id => 2 },
p.338-340 LISTのファイル名(4箇所) 誤 chapter6¥test¥functional¥main_controller.rb
正 chapter6¥test¥functional¥main_controller_test.rb
p.343 囲みの中のコマンド入力 誤 ruby script¥generate controller admin::articles
正 ruby script¥generate controller admin/articles
p.345 RESULTの表
「掲載場所」の列
誤 top
news
activities
notices
top
news
activities
notices
正 トップページ
ニュース
私たちの活動
お知らせ
トップページ
ニュース
私たちの活動
お知らせ
p.346 1番目のLIST 誤 option ? option[1] : '不明'
正 option ? option[0] : '不明'
p.347 RESULTの表
「掲載場所」の行
誤 top
正 トップページ
p.354 3番目のLISTの3行目 誤 :redirect_to => { :action => :'index'}
正 :redirect_to => { :action => :index}
p.355 コラムの本文1行目 誤 articlesコントローラ
正 ArticlesController
p.355 コラムの本文下から4行目 誤 jsファイルに
正 4つのJavaScriptファイル(application.js、prototype.js、effects.js、controls.js)に
p.355 コラムの本文下から3行目 誤 自分でjsファイルにスクリプトを追加するときは、application.jsに記述すれば、javascript_include_tagメソッドで取り込まれます。
正 アプリケーション独自のJavaScriptコードを追加するときは、application.js内に記述し、上記の方法で取り込むとよいでしょう。prototype.js以下の3つのファイルはAjaxやDOM操作を実現するためのライブラリですので中身を変更しないでください。

Chapter 7 コントローラとビュー(応用編)

p.367 本文の1行目 誤 「session[:名前]」
正 「session[:データ名]」
p.369 LISTのファイル名 誤 chapter7¥migrate¥...
正 chapter7¥db¥migrate¥...
p.370 LISTのファイル名 誤 chapter7¥fixtures¥...
正 chapter7¥db¥fixtures¥...
p.370 LISTの4行目 誤 administrator: <%= idx == 1 ? true : false %>
正 administrator: <%= idx == 1 ? "true" : "false" %>
p.370 本文下から2行目 誤 コマンドプロンプトで…
正 (hashed_passwordメソッドを実装してから)コマンドプロンプトで…
p.373 LISTのファイル名 誤 chapter7¥club¥app¥...
正 chapter7¥app¥...
p.377 1つ目のLISTのファイル名 誤 ...¥admin/main_controller.rb
正 ...¥admin¥main_controller.rb
★ p.379 先頭のRESULTの前に追加 誤
正 属性が増えたのでMemberモデルの定数REAL_ATTRIBUTE_NAMESに項目を追加します(「画像」属性は後で出てきます)。

LIST chapter7¥app¥models¥member.rb
REAL_ATTRIBUTE_NAMES = {
  # 中略
  :remarks => '備考',
  :login_name => 'ログイン名',
  :password => 'パスワードの変更',
  :administrator => 'サイト管理者',
  :uploaded_image => '画像'
}
p.380 2つ目のLISTの2行目 誤 :furigana, :email, ...
正 :furigana, :birthday, :email, ...
p.380 3つ目のLISTのファイル名 誤 chapter7¥app¥layouts¥...
正 chapter7¥app¥views¥layouts¥...
p.384 下から2行目 誤 Admin::Membersコントローラ
正 Admin::MembersController
p.385-387 LISTのファイル名(4箇所) 誤 chapter7¥club¥test¥...
正 chapter7¥test¥...
p.392 LISTのファイル名 誤 ...¥my_format/init.rb
正 ...¥my_format¥init.rb
p.398 LISTのファイル名 誤 ...¥mobile/base.rb
正 ...¥mobile¥base.rb
★ p.400 本文下から2行目と3行目の間に挿入 誤
正 config¥routes.rb を開いて、コメント行「# 基本のURLパターン」の上に次の1行を追加してください。
map.connect 'mobile', :controller => 'mobile/main'

★ p.404 HINT「複数の戻り値を返すメソッド」のソースコード 誤 a = n.split(',') return
a[0], a[1]
正 a = n.split(',')
return a[0], a[1]
p.406 ソースコードの次の行 誤 Admin::Membersコントローラ
正 Admin::MembersController
p.408 LISTのファイル名 誤 chapter7¥club¥app¥...
正 chapter7¥app¥...
p.411 LISTのファイル名 誤 chapter7/club/views/main/news.rhtml
正 chapter7¥views¥main¥news.rhtml
p.416 LISTのファイル名 誤 ...¥member_controller.rb
正 ...¥members_controller.rb
p.417 LIST(2つとも)の下から3行目 誤 :size => "96x128"
正 :size => "135x180"
p.417 本文下から2行目の直前に追加 誤
正 また、表示を整えるために、表の「生年月日」から下の5行について <td> を <td colspan="2"> に変更します。
p.418 サブセクション「画像のアップロード」の1行目 誤 Admin::Membersコントローラ
正 Admin::MembersController
p.419 LISTのファイル名 誤 ...¥members/new.rhtml
正 ...¥members¥new.rhtml

Chapter 8 データベースとモデル(応用編)

★ p.428 図 誤 右の3行目から左の2行目への矢印
正 右の3行目から左の1行目への矢印
★ p.430 1つ目のコード 誤 class Entry < ActiveRecord::Base
正 class Comment < ActiveRecord::Base
p.438 本文2行目 誤 「engine.car = car」
正 「@engine.car = @car」
p.438 囲みの2行目 誤 @car = engine.car
正 @car = @engine.car
★ p.448 2つ目のLISTの下から5行目 誤 strftime("%Y-%m-%S")
正 strftime("%Y-%m-%d")
p.450 1-2行目 (3ヶ所) 誤 コントローラ
正 Controller
p.451 LISTのファイル名 誤 ...¥blog_entry.rb
正 ...¥blog.rb
p.456 本文第2段落 誤 beforeフィルタのblock_non_membersメソッドで
正 beforeフィルタのresume_sessionメソッドで
p.460 LISTのファイル名(2箇所) 誤 chapter8¥club¥db¥...
正 chapter8¥db¥...
p.460 2番目のLISTの7行目 誤 footprint<%= i %>a:
正 footprints<%= i %>a:
★ p.465 コラム「has_many :throughを使ったリレーションシップ」中のソースコード 誤 class Blog < ActiveRecord::Base
  has_many :visitors, :through => :footprints
正 class Blog < ActiveRecord::Base
  has_many :footprints
  has_many :visitors, :through => :footprints
p.465 コラム「has_many :throughを使ったリレーションシップ」本文 誤 Footprintsモデル
正 Footprintモデル
p.466 コラム「has_many :throughを使ったリレーションシップ」本文(2ヶ所) 誤 Footprintsモデル
正 Footprintモデル
★ p.467 セクション見出し 誤 has_many_and_belongs_to
正 has_and_belongs_to_many
p.472 最後のLISTのファイル名 誤 chapter8¥app¥models¥blog.rb
正 chapter8¥app¥models¥group.rb
p.473 LISTのファイル名 誤 chapter8¥app¥controllers¥member_controller.rb
正 chapter8¥app¥controllers¥members_controller.rb
p.474 1つ目のLISTのファイル名 誤 chapter8¥app¥controllers¥member_controller.rb
正 chapter8¥app¥controllers¥members_controller.rb
p.474 最後の段落の前に挿入 誤
正 サイドバー用のテンプレートをレイアウトに埋め込みます。

LIST chapter8¥app¥views¥members¥index.rb
<% @page_title = '会員名簿' -%>
<% @page_title = h(@query + ' の検索結果') if @query -%>
<% @page_title = "会員名簿(#{@group.name})" if @group -%>
<% @side_bar_template_name = 'side_bar' -%>
(以下、略)
LIST chapter8¥app¥views¥members¥show.rb
<% @page_title = @member.full_name + ' の詳細' -%>
<% @side_bar_template_name = 'side_bar' -%>
(以下、略)
p.483 LISTのファイル名 誤 chapter8¥club¥app¥...
正 chapter8¥app¥...
p.486 1行目 誤 Booksコントローラ
正 BooksController

Chapter 9 REST

p.498 箇条書きの各項目 (6ヶ所) 誤 コントローラ
正 Controller
p.500 セクション見出し 誤 Admin::Groupsコントローラ
正 Admin::GroupsController
p.501 表のキャプション 誤 Admin::MembersController
正 Admin::GroupsController
p.512 本文3-4行目 誤 IDの指定は行いません。
正 idの指定は行いません。
p.514 本文1行目 誤 Accountコントローラ
正 AccountController
p.514 1つ目のLISTのファイル名 誤 chapter9¥models¥...
正 chapter9¥app¥models¥...
★ p.514 2つ目のLIST
誤 # 会員情報の更新
def update
...
正 # 新規作成
def create
  @member = Member.new(params[:member])
  @member.administrator =
    params[:member][:administrator]
  @member.player = params[:member][:player]
  (中略)

# 会員情報の更新
def update
...

Appendix C Rubyのクラス・メソッド一覧

p.527 表の下から3行目 誤 テラバイト数(1024ギガバイト)を返す。
正 テラバイト数(1024ギガバイト)を返す。terabyteメソッドは別名。
p.527 表の下から2行目 誤 数値×週の秒数を返す。terabyteメソッドは別名。
正 数値×週の秒数を返す。weekメソッドは別名。
p.546 上の表の2行目 誤 月(1月は1、2月は2、・・・)。
正 月(1月は01、2月は02、・・・)。

付属 CD-ROM

chapter7&;app&;views&;admin&;members&;show.rhtml 23行目
chapter8&;app&;views&;admin&;members&;show.rhtml 24行目
chapter9&;app&;views&;admin&;members&;show.rhtml 24行目

誤

    <td rowspan="6" style="text-align:center">

正

    <td rowspan="5" style="text-align:center">

chapter7&;app&;views&;admin&;members&;show.rhtml 50行目
chapter8&;app&;views&;admin&;members&;show.rhtml 51行目
chapter9&;app&;views&;admin&;members&;show.rhtml 51行目

誤

    <td><%= @member.birthday.strftime('%Y/%m/%d') %></td>

正

    <td colspan="2"><%= @member.birthday.strftime('%Y/%m/%d') %></td>

chapter8&;app&;views&;blog_entries&;new.rhtml
chapter9&;app&;views&;blog_entries&;new.rhtml

誤

<% @page_title = 'ブログ記事の作成' -%>
<% @side_bar_template_name = 'side_bar' -%>
<div id="main">
<h1><%= h(@page_title) %></h1>

<div class="command-box">
<%= link_to(@current_user.blog.title, :action => 'index',
      :blog_id => @current_user.blog.id) %>
</div>

<%= render :partial => 'errors' -%>

(以下、略)

正

<% @page_title = 'ブログ記事の作成' -%>
<% @side_bar_template_name = 'side_bar' -%>
<div id="main">
<h1><%= h(@page_title) %></h1>

<%= render :partial => 'errors' -%>

(以下、略)

5-9行目を削除してください。この部分は本来不要であると同時に、アプリケーションに不具合を引き起こします。まだ一度もブログを投稿していないユーザーがこのページを表示すると @current_user.blog が nil になるため、例外 NoMethodError が発生します。


chapter9&;app&;controllers&;admin&;members_controller.rb

誤

(前略)
  # 新規作成
  def create
    @member = Member.new(params[:member])

    if @member.save
(後略)

正

(前略)
  # 新規作成
  def create
   @member = Member.new(params[:member])
    @member.administrator = params[:member][:administrator]
    @member.player = params[:member][:player]

    if @member.save
(後略)

Member モデルの attr_protected に administrator および player フィールドを指定したため、会員の新規作成においても明示的に値を格納する必要があります。


chapter8&;app&;helpers&;mobile&;blog_entries_helper.rb
chapter9&;app&;helpers&;mobile&;blog_entries_helper.rb

誤

module Mobile::BlogsHelper
end

正

module Mobile::BlogEntriesHelper
end

chapter9&;test&;functional&;account_controller_test.rb 86 行目

誤

def test_update2

正

def test_update3

2007年10月24日 (2010年8月14日更新)
黒田 努
佐藤 和人
株式会社オイアクス

本書の内容についてご質問、ご感想、ご批判を、kiso-rails&;oiax.jpまでメールでお送りください。
誤字・誤記のご指摘に関しては、どのような些細なものでも歓迎いたします。
返信には、しばらくお時間をいただく場合がございます。
なお、本書の内容から大幅に外れる質問には回答をお断りする場合もございます。あらかじめご了承ください。