We try to keep our books accurate, but sometimes mistakes creep in. This page lists the errors submitted by our astute readers. If you've found a new error, please submit it.

The latest version of the book is P1.0, released almost 6 years ago. If you've bought a PDF of the book and would like to upgrade it to this version (for free), visit your home page.

Key: Typo Tech. Error Suggestion Not a problem Next edition

By default this page displays the errata for the latest version of the book. If you have a previous version, select it here:  

(To find out what version you have, look at the copyright page, a few pages in from the front of the book. If it says (say) 'Second Printing', then here it'll be P2.0. If there are interim PDF releases in that printing, they'll be 2.1, 2.2, and so on.)

PDF Paper Description Found in Fixed in
14

#37437: rake migrate is enough, no need to rake create before that--Reuben Sivan

P1.0
02-Feb-09
18
#37296: re: puts events.map(&:name) The frequent use of the &:method_name syntax in this book warrants some explanation. As far as I can tell, the...more...
P1.0
26-Jan-09
21

#37446: I'd suggest the reader at this point to add a search.html.erb file to display the search results--Reuben Sivan

P1.0
02-Feb-09
21
#47074: Routes syntax changed considerably in ROR 3. The eg given map.resources :events, :collection => { :search => :get } Should be <code> ...more...
P1.0
17-May-11
22

#37427: the method copy in this page is incomplete. The online code has it right.--Reuben Sivan

P1.0
01-Feb-09
26
#37451: in registrations/index.html.erb, the following line of code: for registration in @registrations should be for registration in @event.regi...more...
P1.0
02-Feb-09
32

#33955: Second to the last paragraph, last line, should probably say "as we'll see in *a* minute"

P1.0
13-Aug-08
44

#47076: Download CatchAll404s/app/models/four_oh_four.rb

find_or_initialize
in code provided

find_and_initialize
in code description--Vlad Ivanovic

P1.0
18-May-11
50
#41710: On the bottom of page 50, it says, "we can mix in our custom validation methods only when we need them." I don't understand. They're always ...more...
B1.06
05-Dec-09
70
#33413: The exisiting_task_attributes POST parameter example shows the hash of the existing task as and array of hashes. I think it is actually just ...more...
P1.0
31-Jul-08
72
#40573: In the first code example, it shows that "existing_task_attributes" references an array of hashes. I think it just references a hash, and the...more...
P1.0
27-Aug-09
73

#33044: The recipe is formatted differently from the others (has no "problem", "ingredients", "solution", etc. tabs). This looks messy--vzakharov@gmail.com

P1.0
14-Jul-08
73
#31852: Hi, there's a delete of a task from inside an iterator. I don't think that's safe, you'll not get to the end of the collection there. I had a ...more...
P1.0
02-May-08
80

#43585: Both the text and graphical depiction of the state machine ignore previous! when in state q10.--Seth Arnold

P1.0
06-Jun-10
82
#43586: "Notice that we didn't call the new method on Quiz. We have to use the create method in order for the acts_as_state_machine magic to kick in a...more...
P1.0
06-Jun-10
83

#43587: "we'll write a helper figure out"

s/helper figure/helper to figure/--Seth Arnold

P1.0
06-Jun-10
89

#44988: The download url for attachment_fu is not longer valid. The new url is (http) @ github.com/technoweenie/attachment_fu.git--Wolfgang Barth

P1.0
12-Sep-10
90
#32352: For the upload images with thumbnail you have the migration file for the Covers. I don't see a migration file for the actual Albums. Can you...more...
P1.0
10-Jun-08
93
#43588: "Second, the form uses the file_field_tag helper (instead of f.file_field) to generate a Choose File button on the form." Why is the form u...more...
P1.0
06-Jun-10
94
#31878: rescue and then just return false eats all exceptions (I for example had a type in the code), in my point of view this is very dangerous. Don'...more...
P1.0
05-May-08
98
#34712: in the save method of the AlbumService, you have: if @cover.new_record? @album.cover.destroy if @album.cover @cover.album = @album ...more...
P1.0
01-Oct-08
117
#31675: DynamicMetaTags has this code which fails on IE: def meta(name, content) %(<meta name="#{name}" content="#{content} />" ) end should...more...
B1.06
16-Apr-08
131

#43589: "native text­--indexing extension." using a different hyphenation than "plug-in" or "T-search"--Seth Arnold

P1.0
06-Jun-10
135
#41718: It says, "String-based fields (for example, the MySQL VARCHAR type) can often be easily indexed directly in the database where appropriate." ...more...
B1.06
05-Dec-09
139
#41719: It says, "you may want to change the name of the pid_file for the three environments so that you can run servers for each environment simultan...more...
B1.06
05-Dec-09
140
#41720: It says "Calling find_by_contents turns around behind the scenes..." However, there's a huge amount of space after "Calling". Maybe it's jus...more...
B1.06
05-Dec-09
147
#31886: After the two rake commands on the 4th & 5th lines of p147, it says: "(If you're into shortcuts, these THREE Rake tasks..." I believe th...more...
P1.0
05-May-08
156
#36446: Assuming that the sample results from Article.publicly_viewable and Article.premium are sorted by id, wouldn't Article.publicly_viewable.premi...more...
P1.0
15-Dec-08
162

#34949: error_handling_form_builder.rb lists helpers in a series of %w(...) clauses. collection_select is duplicated --Brett Hughes

P1.0
07-Oct-08
162
#31672: Keep Forms Dry, error_handling_form_builder.rb defines array of helpers; two are removed in the line "%w(label fields_for)" -- this should als...more...
B1.06
15-Apr-08
171
#33957: OrdersController should show samples of all actions not just NEW and CREATE because you are likely going to need them. This would also disting...more...
P1.0
13-Aug-08
172
#43784: The implementation of OrderPresenter will allow form submissions to assign any value to any of the supported models, completely bypassing the ...more...
P1.0
12-Jun-10
188

#32079: recipe #32 is a potential security problem.
Sending email.
--Michael Richardson

P1.0
18-May-08
196

#41712: It says, "The encrypt method creates a new instance of the chosen cipher." I'm guessing that' it's actually Cipher.new that creates the new instance.--Shannon -jj Behrens

B1.06
05-Dec-09
204
#41721: In the "Discussion" section for "Process Credit Card Payments", it'd be useful to mention that authorize.net has a customer information manage...more...
B1.06
05-Dec-09
211
#41722: I'm looking at Geocoding/app/views/restaurants/search.html.erb. It's interesting to note that "restaurants" is pluralized, but "miles" isn't....more...
B1.06
05-Dec-09
212
#32277: In the restaurants.html.erb layout file the line containing the google maps API key has a return character. When accessing the internet throug...more...
P1.0
05-Jun-08
212
#33845: I think it should be mentioned where to get the class S3Uploader and what does it do (does it erase the filesystem files?, does it save the th...more...
P1.0
09-Aug-08
212
#44602: to_json function behavior (Also please see contribution #42448 as reference) In Rails 2.3.5 your code does not work. In order to make yo...more...
P1.0
13-Aug-10
212
#42448: Rails version - 2.3.5 ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0] gem version 1.3.6 The entry in app/layouts/restaurants...more...
P1.0
13-Mar-10
216
#32679: If you don't use the "set_no_auto_load true" option described later in the recipe, the args passed to the create method will be nil which caus...more...
P1.0
07-Jul-08
218
#43590: "The billing_status method gets the status status" The variable is already named 'status', "status status" seems silly :) we don't want the...more...
P1.0
06-Jun-10
220
#43591: "However, on a really busy day, we might have multiple shop owners all sending e-mails at the same time. And if the worker is already busy whe...more...
P1.0
06-Jun-10
224
#42593: Implementing the acts_as_state_machine works perfectly when using the Pdf model inside controllers and the console. But no matter what I do I ...more...
P1.0
01-Apr-10
233

#43592: The procmail recipe is broken; it is missing the 'cd'.--Seth Arnold

P1.0
06-Jun-10
235
#41891: The -otherwise excellent- recipe contains an nginx conf. snippet to make sure all requests return the maintenance page: if ($reques...more...
P1.0
22-Dec-09
235
#41717: I'm reading the "Send Lightweight Messages" recipe. I'm worried that if the rake task crashes after getting the task, the task will be lost. ...more...
B1.06
05-Dec-09
238

#33354: Broken link to March Chung's plug-in.--Lauri Lehtinen

P1.0
29-Jul-08
239

#34113: creating the worker as per the example, the job_key is not returned, though the code seems to work otherwise

P1.0
18-Aug-08
242
#40239: It may be obvious to those that have been doing Rails for a while but for new folks you might want to mention that the Backgroundrb requires t...more...
P1.0
28-Jul-09
247 247

#43170: Book says:

class Addressable
belongs_to :addressable, :polymorphic => true
end

But maybe it means:

class Address
...
end--Justin E Myers

P1.0
10-May-10
249
#43593: The entire RSpec recipe, I was waiting to find out why anyone would bother with using RSpec. I didn't see anything obvious while reading it th...more...
P1.0
06-Jun-10
279

#43594: s/loop holes/loopholes/--Seth Arnold

P1.0
06-Jun-10
280
#43595: In the epub version of the book, "underlying assertions:assert_w3c and assert_tidy". There is a linebreak in the pdf (and probably the paper :...more...
P1.0
06-Jun-10
288

#41713: It says, "One fairly unique feature of Shoulda is nested contexts." RSpec has this too, right?--Shannon -jj Behrens

B1.06
05-Dec-09
291
#31680: In the first set of code examples on the page, a list of caching commands to execute through the console, in the last example of that section:...more...
B1.06
17-Apr-08
297
#31955: This recipe doesn't work. If I type Status::PENDING on the console, I always get a NameError: uninitialized constant Status::PENDING Maybe ...more...
P1.0
09-May-08
297
#32253: It should be mentioned that the caches_constants method does not play nice with tests (at least in Rails 2.0.2). Apparently fixtures are lo...more...
P1.0
03-Jun-08
300
#31659: I still get the "can't Fixnum into String" error when loading a page with '?browser_profile!' appended to the URL. This was reported for th...more...
B1.06
13-Apr-08
301

#41711: It says "rake:test:acceptance". I think this should be "rake test:acceptance".--Shannon -jj Behrens

B1.06
05-Dec-09
323

#37956: This is of little importance, but the second line in the "Problem" paragraph should probably start with "by HIPAA" (instead of "by HIPPA")--Jan Gänsler

P1.0
25-Feb-09
344
#43596: In the epub version of the book, 'devel-opment' has an embedded hyphen; the PDF looks fine, because there is a word-wrap there, so I assume ad...more...
P1.0
06-Jun-10
366
#41714: In this code, the salt is configured once for each environment. It'd be better if each and every piece of data was encrypted with a different...more...
B1.06
05-Dec-09
368

#41715: I see "proxy_set header X_FORWARDED_PROTO https;". What happens if the user uses HTTP instead of HTTPS and manually sets that header?--Shannon -jj Behrens

B1.06
05-Dec-09
370
#41716: This recipe will redirect the user to HTTPS if he uses HTTP. However, if you accidentally submit a credit card over HTTP, it's too late--the ...more...
B1.06
05-Dec-09
376
#43597: "One important caveat: Piston doesn't preserve change history from the remote repository. Piston just takes the latest revision, or difference...more...
P1.0
06-Jun-10
380
#32384: RE: subdomains as account keys: There's a weird issue with Leopard and request.subdomains -- I found the solution on the rails wiki (yeah, ...more...
P1.0
14-Jun-08
382
#46228: "... and call set_cookie domain only when ..." should be "... and call set_cookie_domain only when ... " (located near the end of the paragr...more...
P1.0
13-Jan-11
389

#33045: "Bibliography" section is given as a part of "Big picture recipes"--vzakharov@gmail.com

P1.0
14-Jul-08
394

#32022: Index item for "Konkel, William" should be "Konkel, Warren".--Mike Clark

P1.0
16-May-08
429
#41723: In the "Discussion" section of "Give Users Their Own Subdomain", I think you should add a few more caveats. If you give users their own sub...more...
B1.06
05-Dec-09
432
#41724: It says: message = (String === message ? message : msg.inspect) Is it really supposed to say "String === message"? Is that really ...more...
B1.06
05-Dec-09
433

#41725: In recipes_log_formatter.rb, it says:

.gsub(/\n/, '').strip

Why not replace newlines with spaces? That would be less confusing.--Shannon -jj Behrens

B1.06
05-Dec-09