『基礎Ruby on Rails』 初版第2刷 正誤表
弊社監修の『基礎Ruby on Rails』初版第2刷 (インプレスジャパン刊)の内容に誤りが見つかりましたので、正誤表を掲載いたします。特に重要な項目には★印を付しました。
その他の版・刷については正誤表一覧をご覧ください。
また、付録CD-ROMにおいて chapter3 ディレクトリの中身に一部欠落がございました。このディレクトリ全体をZIP形式でまとめましたので、次のリンクよりダウンロードしてください。
この正誤表のPDF版は次のリンクよりダウンロードできます。
読者の皆様さまにご迷惑をお掛けしたことを深くお詫びいたします。
なお、読者サポートページも合わせてご参照ください。
Chapter 1 イントロダクション
| p.21 | 第2段落 | 誤 | 美しいコードが書けるからRailsを選んだ | |
|---|---|---|---|---|
| 正 | 美しいコードが書けるからRubyを選んだ | |||
| ★ | 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の下の... |
Chapter 2 Rubyの基礎を学ぼう
| 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.173 | LISTのファイル名 | 誤 | lesson_helper.rhtml | |
|---|---|---|---|---|
| 正 | lesson_helper.rb | |||
| p.177 | LIST およびソースコードの1行目 (2ヶ所) | 誤 | Powerd by | |
| 正 | Powered by | |||
| 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.229 | 本文中央付近 | 誤 | :conditionに指定できるのは | |
|---|---|---|---|---|
| 正 | :conditionsに指定できるのは | |||
| 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.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 2行目 | 誤 | <div id ="main"> <h1><%= h(@page-title) %></h1> |
|
| 正 | <div id ="main"> <h1><%= h(@page_title) %></h1> |
|||
| ★ | p.282 | LIST (下から2行目) | 誤 | { :method => :delete, ... |
| 正 | { :method => :post, ... | |||
| p.291 | 1番目のLISTのファイル名 | 誤 | chapter5¥club¥app¥... | |
| 正 | chapter5¥app¥... | |||
| p.293 | LISTの3行目 | 誤 | :message => 'が間違っています。', | |
| 正 | :message => 'の書式が不正です。', |
Chapter 6 テスト
| ★ | p.325 | 2番目のLIST (ページの最下行) | 誤 | @sets_expired_at = [true, 1, '1'],include?(checked) |
|---|---|---|---|---|
| 正 | @sets_expired_at = [true, 1, '1'].include?(checked) |
|||
| ★ | p.326 | 本文1-2行目 | 誤 | test_validation_on_expired_at1メソッドで |
| 正 | test_validation_on_expired_at2メソッドで | |||
| 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 | 1番目のLISTの3行目 | 誤 | :redirect_to => { :action => :'index'} | |
| 正 | :redirect_to => { :action => :index} | |||
| 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 = { |
|||
| p.380 | 2つ目のLISTの2行目 | 誤 | :furigana, :email, ... | |
| 正 | :furigana, :birthday, :email, ... | |||
| p.380 | 3つ目のLISTのファイル名 | 誤 | chapter7¥app¥layouts¥... | |
| 正 | chapter7¥app¥views¥layouts¥... | |||
| 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.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.419 | LISTのファイル名 | 誤 | ...¥members/new.rhtml | |
| 正 | ...¥members¥new.rhtml |
Chapter 8 データベースとモデル(応用編)
| ★ | 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.450 | 1行目 | 誤 | Admin::Membersv | |
| 正 | Admin::MembersController | |||
| 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.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¥... |
Chapter 9 REST
| p.512 | 本文3-4行目 | 誤 | IDの指定は行いません。 | |
|---|---|---|---|---|
| 正 | idの指定は行いません。 | |||
| ★ | 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メソッドは別名。 |
付属 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
2008年3月7日 (2010年7月22日更新)
黒田 努
佐藤 和人
株式会社オイアクス
本書の内容についてご質問、ご感想、ご批判を、kiso-rails@oiax.jpまでメールでお送りください。
誤字・誤記のご指摘に関しては、どのような些細なものでも歓迎いたします。
返信には、しばらくお時間をいただく場合がございます。
なお、本書の内容から大幅に外れる質問には回答をお断りする場合もございます。あらかじめご了承ください。

