『基礎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 = {
  # 中略
  :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.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までメールでお送りください。
誤字・誤記のご指摘に関しては、どのような些細なものでも歓迎いたします。
返信には、しばらくお時間をいただく場合がございます。
なお、本書の内容から大幅に外れる質問には回答をお断りする場合もございます。あらかじめご了承ください。