This is a relatively current title on an often neglected topic, but the poor proofreading and numerous errors and inconsistencies in the accompanying source code marred the execution. The code is organized by chapters, but the unusual conventions and unfortunate omissions made it hard to follow (and debug):
1. Although it is indicated that a gemset has been used by the authors, they failed to include the file which specifies the exact gem versions that were used (Gemfile.lock), so had a different version been used and proved to be problematic (devise being one of them), the reader would be none the wiser.
2. For certain files that were modified gradually over the course of the book, the authors included all of the various versions. That is not a bad idea in itself, but it was done by including them as separate files in the same location (file.v1 file.v2 file.v3) without any form of version control. Over time it also becomes clear that errors have slipped in while the code package was updated along with the book, even more so without the assistance of version control. There was a defunct migration file that had to be removed for rake db:migrate to work, some redundant resources/models that were completely unused throughout the book were also not removed.
3. The chapters are related, but the sample code for each tends to be prepared to work in isolation only, and sometimes not at all (due to either omissions of controller code, or simply just mistakes), so at times the reader will have to figure out what is "broken", and fill in the missing pieces just to be able to see a minimally working sample. This is especially so for the css sprites example (which was just outright broken), and to a lesser extent the mobile views (Chapter 7) and the views for vanity a/b testing (Chapter 9). The code will not run by screenshots alone, or a production environment said to be giving so-and-so results, which the reader has no access to anyway. Failure to address the content as a whole is also an omission of practical reality - while it is nice to add mobile views, cucumber tests and custom form builders, it would be pointless if one happens to break the other.
4. About the incomplete examples due to omission of certain building blocks, some view/partial files are included but appear as dangling files that are not used anywhere else in the code, while others lack the supporting controller code or have no links within the website (thus accessible only through direct links, if the reader is even aware of them).
It is inevitable for a book to have errors, but a great number of them (both in print and code, check the errata page on the publisher's site) could have been avoidable if the writers have at least tried to vet their code one last time. Given the broad scope of the book, this is understandably more difficult, and yet even more so important. It is my hope to send a clear message to the publisher that the insufficient proofreading and lack of consideration turned out pretty badly, and should never be repeated again.