The Rails 3 Way / Edition 2

Paperback (Print)
Used and New from Other Sellers
Used and New from Other Sellers
from $1.99
Usually ships in 1-2 business days
(Save 96%)
Other sellers (Paperback)
  • All (32) from $1.99   
  • New (4) from $34.75   
  • Used (28) from $1.99   


The Rails™ 3 Way is a comprehensive resource that digs into the new features in Rails 3 and perhaps more importantly, the rationale behind them.
—Yehuda Katz, Rails Core

The Bible for Ruby on Rails Application Development

Ruby on Rails strips complexity from the development process, enabling professional developers to focus on what matters most: delivering business value via clean and maintainable code. The Rails™ 3 Way is the only comprehensive, authoritative guide to delivering production-quality code with Rails 3. Pioneering Rails expert Obie Fernandez and a team of leading experts illuminate the entire Rails 3 API, along with the idioms, design approaches, and libraries that make developing applications with Rails so powerful. Drawing on their unsurpassed experience and track record, they address the real challenges development teams face, showing how to use Rails 3 to maximize your productivity.

Using numerous detailed code examples, the author systematically covers Rails 3 key capabilities and subsystems, making this book a reference that you will turn to again and again. He presents advanced Rails programming techniques that have been proven effective in day-to-day usage on dozens of production Rails systems and offers important insights into behavior-driven development and production considerations such as scalability. Dive deep into the Rails 3 codebase and discover why Rails is designed the way it is—and how to make it do what you want it to do.

This book will help you

  • Learn what’s new in Rails 3
  • Increase your productivity as a web application developer
  • Realize the overall joy in programming with Rails
  • Leverage Rails’ powerful capabilities for building REST-compliant APIs
  • Drive implementation and protect long-term maintainability using RSpec
  • Design and manipulate your domain layer using Active Record
  • Understand and program complex program flows using Action Controller
  • Master sophisticated URL routing concepts
  • Use Ajax techniques via Rails 3 support for unobtrusive JavaScript
  • Learn to extend Rails with popular gems and plugins, and how to write your own
  • Extend Rails with the best third-party plug-ins and write your own
  • Integrate email services into your applications with Action Mailer
  • Improve application responsiveness with background processing
  • Create your own non-Active Record domain classes using Active Model
  • Master Rails’ utility classes and extensions in Active Support
Read More Show Less

Editorial Reviews

From Barnes & Noble
The Rails Way is about building polished, robust Rails-based applications that delight both enterprise IT organizations and users.

This book isn't "just" a detailed guide to the Rails API, though it certainly accomplishes that (not insignificant) task. Obie Fernandez also offers hard-earned best practices for everything from managing complex program flows and Rails routing through testing and performance optimization.

Fernandez introduces open source libraries and third-party plug-ins that make Rails even more convenient and productive. He offers high-level coverage of program design, as well as detailed real-world techniques for everything from authentication to email integration. There's even a full chapter on the sizzling-hot topic of Representational State Transfer (REST). It's all presented with the depth (and Rails sample code) you need to do the job right even in challenging production environments. Bill Camarda, from the December 2007 Read Only

From the Publisher
Praise for the Previous Edition

This encyclopedic book is not only a definitive Rails reference, but an indispensable guide to Software-as-a-Service coding techniques for serious craftspersons. I keep a copy in the lab, a copy at home, and a copy on each of my three e-book readers, and it’s on the short list of essential resources for my undergraduate software engineering course.

—Armando Fox, adjunct associate professor, University of California, Berkeley

Everyone interested in Rails, at some point, has to follow The Rails Way.

—Fabio Cevasco, senior technical writer, Siemens AG, and blogger at

I can positively say that it’s the single best Rails book ever published to date. By a long shot.

—Antonio Cangiano, software engineer and technical evangelist at IBM

This book is a great crash course in Ruby on Rails! It doesn’t just document the features of Rails, it filters everything through the lens of an experienced Rails developer—so you come our a pro on the other side.

—Dirk Elmendorf, co-founder of Rackspace, and Rails developer since 2005

The key to The Rails Way is in the title. It literally covers the “way” to do almost everything with Rails. Writing a truly exhaustive reference to the most popular Web application framework used by thousands of developers is no mean feat. A thankful community of developers that has struggled to rely on scant documentation will embrace The Rails Way with open arms. A tour de force!

—Peter Cooper, editor, Ruby Inside

In the past year, dozens of Rails books have been rushed to publication. A handful are good. Most regurgitate rudimentary information easily found on the Web. Only this book provides both the broad and deep technicalities of Rails. Nascent and expert developers, I recommend you follow The Rails Way.

—Martin Streicher, chief technology officer, McLatchy Interactive; former editor-in-chief of Linux Magazine

Hal Fulton’s The RubyWay has always been by my side as a reference while programming Ruby. Many times I had wished there was a book that had the same depth and attention to detail, only focused on the Rails framework. That book is now here and hasn’t left my desk for the past month.

—Nate Klaiber, Ruby programmer

As noted in my contribution to the Afterword: “What Is the Rails Way (To You)?,” I knew soon after becoming involved with Rails that I had found something great. Now, with Obie’s book, I have been able to step into Ruby on Rails development coming from .NET and be productive right away. The applications I have created I believe to be a much better quality due to the techniques I learned using Obie’s knowledge.

—Robert Bazinet,, .NET and Ruby community editor, and founding member of the Hartford, CT, Ruby Brigade

Extremely well written; it’s a resource that every Rails programmer should have. Yes, it’s that good.

—Reuven Lerner, Linux Journal columnist

Read More Show Less

Product Details

  • ISBN-13: 9780321601667
  • Publisher: Addison-Wesley
  • Publication date: 12/24/2010
  • Series: Addison-Wesley Professional Ruby Series
  • Edition number: 2
  • Pages: 850
  • Sales rank: 1,029,520
  • Product dimensions: 6.90 (w) x 8.90 (h) x 1.60 (d)

Meet the Author

Obie Fernandez has been hacking computers since he got his first Commodore VIC-20 in the eighties, and found himself in the right place and time as a programmer on some of the first Java enterprise projects of the mid-nineties. Obie has been evangelizing Ruby on Rails online via blog posts and publications since early 2005. He has traveled around the world relentlessly promoting Rails at large industry conferences. As CEO and Founder of Hashrocket, Obie specializes in orchestrating the creation of large-scale, web-based applications, both for startups and mission-critical enterprise projects. He still gets his hands dirty with code on at least a weekly basis and posts regularly on various topics to his popular technology blog.
Read More Show Less

Table of Contents

Foreword by David Heinemeier Hansson xxxiii

Foreword by Yehuda Katz xxxv

Introduction xxxvii

Acknowledgments xliii

About the Author xlv

Chapter 1: Rails Environments and Configuration 1

1.1 Bundler 2

1.2 Startup and Application Settings 8

1.3 Development Mode 15

1.4 Test Mode 19

1.5 Production Mode 20

1.6 Logging 23

1.7 Conclusion 29

Chapter 2: Routing 31

2.1 The Two Purposes of Routing 32

2.2 The routes.rb File 33

2.3 Route Globbing 45

2.4 Named Routes 46

2.5 Scoping Routing Rules 50

2.6 Listing Routes 53

2.7 Conclusion 54

Chapter 3: REST, Resources, and Rails 55

3.1 REST in a Rather Small Nutshell 55

3.2 Resources and Representations 56

3.3 REST in Rails 57

3.4 Routing and CRUD 58

3.5 The Standard RESTful Controller Actions 61

3.6 Singular Resource Routes 64

3.7 Nested Resources 65

3.8 RESTful Route Customizations 69

3.9 Controller-Only Resources 74

3.10 Different Representations of Resources 76

3.11 The RESTful Rails Action Set 78

3.12 Conclusion 83

Chapter 4: Working with Controllers 85

4.1 Rack 86

4.2 Action Dispatch: Where It All Begins 88

4.3 Render unto View 92

4.4 Additional Layout Options 101

4.5 Redirecting 101

4.6 Controller/View Communication 104

4.7 Filters 105

4.8 Verification 111

4.9 Streaming 112

4.10 Conclusion 117

Chapter 5: Working with Active Record 119

5.1 The Basics 120

5.2 Macro-Style Methods 121

5.3 Defining Attributes 123

5.4 CRUD: Creating, Reading, Updating, Deleting 127

5.5 Database Locking 142

5.6 Where Clauses 146

5.7 Connections to Multiple Databases in Different Models 153

5.8 Using the Database Connection Directly 154

5.9 Other Configuration Options 158

5.10 Conclusion 159

Chapter 6: Active Record Migrations 161

6.1 Creating Migrations 161

6.2 Data Migration 173

6.3 schema.rb 174

6.4 Database Seeding 175

6.5 Database-Related Rake Tasks 176

6.6 Conclusion 179

Chapter 7: Active Record Associations 181

7.1 The Association Hierarchy 181

7.2 One-to-Many Relationships 183

7.3 The belongs—to Association 191

7.4 The has—many Association 200

7.5 Many-to-Many Relationships 209

7.6 One-to-One Relationships 223

7.7 Working with Unsaved Objects and Associations 226

7.8 Association Extensions 227

7.9 The AssociationProxy Class 229

7.10 Conclusion 230

Chapter 8: Validations 231

8.1 Finding Errors 231

8.2 The Simple Declarative Validations 232

8.3 Common Validation Options 242

8.4 Conditional Validation 243

8.5 Short-form Validation 245

8.6 Custom Validation Techniques 246

8.7 Skipping Validations 249

8.8 Working with the Errors Hash 249

8.9 Testing Validations with Shoulda 250

8.10 Conclusion 250

Chapter 9: Advanced Active Record 251

9.1 Scopes 251

9.2 Callbacks 256

9.3 Calculation Methods 265

9.4 Observers 268

9.5 Single-Table Inheritance (STI) 269

9.6 Abstract Base Model Classes 276

9.7 Polymorphic has many Relationships 277

9.8 Foreign-key Constraints 281

9.9 Using Value Objects 281

9.10 Modules for Reusing Common Behavior 285

9.11 Modifying Active Record Classes at Runtime 289

9.12 Conclusion 292

Chapter 10: Action View 293

10.1 Layouts and Templates 294

10.2 Partials 302

10.3 Conclusion 308

Chapter 11: All About Helpers 309

11.1 ActiveModelHelper 309

11.2 AssetTagHelper 316

11.3 AtomFeedHelper 324

11.4 CacheHelper 326

11.5 CaptureHelper 326

11.6 DateHelper 328

11.7 DebugHelper 333

11.8 FormHelper 333

11.9 FormOptionsHelper 350

11.10 FormTagHelper 355

11.11 JavaScriptHelper 358

11.12 NumberHelper 359

11.13 PrototypeHelper 361

11.14 RawOutputHelper 361

11.15 RecordIdentificationHelper 362

11.16 RecordTagHelper 363

11.17 SanitizeHelper 364

11.18 TagHelper 366

11.19 TextHelper 367

11.20 TranslationHelper and the I18n API 372

11.21 UrlHelper 391

11.22 Writing Your Own View Helpers 398

11.23 Wrapping and Generalizing Partials 401

11.24 Conclusion 407

Chapter 12: Ajax on Rails 409

12.1 Unobtrusive JavaScript 411

12.3 Ajax and JSON 419

12.3.1 Ajax link to 419

12.4 Ajax and HTML 421

12.5 Ajax and JavaScript 423

12.6 Conclusion 424

Chapter 13: Session Management 425

13.1 What to Store in the Session 426

13.2 Session Options 427

13.3 Storage Mechanisms 427

13.4 Cookies 431

13.5 Conclusion 432

Chapter 14: Authentication 433

14.1 Authlogic 434

14.2 Devise 439

14.3 Conclusion 443

Chapter 15: XML and Active Resource 445

15.1 The to—xml Method 445

15.2 The XML Builder 454

15.3 Parsing XML 456

15.4 Active Resource 457

15.5 Active Resource Authentication 465

15.6 Conclusion 469

Chapter 16: Action Mailer 471

16.1 Setup 471

16.2 Mailer Models 472

16.3 Receiving Emails 477

16.4 Server Configuration 479

16.5 Testing Email Content 479

16.6 Conclusion 481

Chapter 17: Caching and Performance 483

17.1 View Caching 483

17.2 General Caching 495

17.3 Control Web Caching 497

17.4 ETags 498

17.5 Conclusion 500

Chapter 18: RSpec 501

18.1 Introduction 501

18.2 Basic Syntax and API 504

18.3 Predicate Matchers 513

18.4 Custom Expectation Matchers 514

18.5 Shared Behaviors 517

18.6 RSpec’s Mocks and Stubs 517

18.7 Running Specs 520

18.8 RSpec Rails Gem 521

18.9 RSpec Tools 531

18.10 Conclusion 533

Chapter 19: Extending Rails with Plugins 535

19.1 The Plugin System 536

19.2 Writing Your Own Plugins 537

19.3 Conclusion 547

Chapter 20: Background Processing 549

20.1 Delayed Job 550

20.2 Resque 553

20.3 Rails Runner 557

20.4 Conclusion 559

Appendix A: Active Model API Reference 561

A.1 Attribute Methods 561

A.2 Callbacks 563

A.3 Conversion 563

A.4 Dirty 564

A.5 Errors 565

A.6 Lint::Tests 567

A.7 MassAssignmentSecurity 567

A.8 Name 568

A.9 Naming 569

A.10 Observer 569

A.11 Observing 570

A.12 Serialization 571

A.13 Serializers::JSON 572

A.14 Serializers::Xml 572

A.15 Translation 573

A.16 Validations 574

A.17 Validator 578

Appendix B: Active Support API Reference 579

B.1 Array 579

B.2 ActiveSupport::BacktraceCleaner 585

B.3 ActiveSupport::Base64 586

B.4 ActiveSupport::BasicObject 586

B.5 ActiveSupport::Benchmarkable 587

B.6 BigDecimal 588

B.7 ActiveSupport::BufferedLogger 588

B.8 ActiveSupport::Cache::Store 590

B.9 ActiveSupport::Callbacks 595

B.10 Class 598

B.11 ActiveSupport::Concern 602

B.12 ActiveSupport::Configurable 603

B.13 Date 603

B.14 DateTime 609

B.15 ActiveSupport::Dependencies 613

B.16 ActiveSupport::Deprecation 617

B.17 ActiveSupport::Duration 617

B.18 Enumerable 619

B.19 ERB::Util 620

B.20 FalseClass 621

B.21 File 621

B.22 Float 622

B.23 Hash 622

B.24 HashWithIndifferentAccess 627

B.25 ActiveSupport::Inflector::Inflections 628

B.26 Integer 632

B.27 ActiveSupport::JSON 633

B.28 Kernel 634

B.29 Logger 635

B.30 ActiveSupport::MessageEncryptor 636

B.31 ActiveSupport::MessageVerifier 637

B.32 Module 638

B.33 ActiveSupport::Multibyte::Chars 645

B.34 NilClass 648

B.35 ActiveSupport::Notifications 649

B.36 Numeric 650

B.37 Object 653

B.38 ActiveSupport::OrderedHash 657

B.39 ActiveSupport::OrderedOptions 657

B.40 ActiveSupport::Railtie 658

B.41 Range 658

B.42 Regexp 660

B.43 ActiveSupport::Rescuable 660

B.44 ActiveSupport::SecureRandom 661

B.45 String 662

B.46 ActiveSupport::StringInquirer 671

B.47 Symbol 671

B.48 ActiveSupport::Testing::Assertions 671

B.49 Time 673

B.50 ActiveSupport::TimeWithZone 680

B.51 ActiveSupport::TimeZone 681

B.52 ActiveSupport::TrueClass 684

B.53 ActiveSupport::XmlMini 684

Index 687

Method Index 697

Read More Show Less

Customer Reviews

Average Rating 5
( 1 )
Rating Distribution

5 Star


4 Star


3 Star


2 Star


1 Star


Your Rating:

Your Name: Create a Pen Name or

Barnes & Review Rules

Our reader reviews allow you to share your comments on titles you liked, or didn't, with others. By submitting an online review, you are representing to Barnes & that all information contained in your review is original and accurate in all respects, and that the submission of such content by you and the posting of such content by Barnes & does not and will not violate the rights of any third party. Please follow the rules below to help ensure that your review can be posted.

Reviews by Our Customers Under the Age of 13

We highly value and respect everyone's opinion concerning the titles we offer. However, we cannot allow persons under the age of 13 to have accounts at or to post customer reviews. Please see our Terms of Use for more details.

What to exclude from your review:

Please do not write about reviews, commentary, or information posted on the product page. If you see any errors in the information on the product page, please send us an email.

Reviews should not contain any of the following:

  • - HTML tags, profanity, obscenities, vulgarities, or comments that defame anyone
  • - Time-sensitive information such as tour dates, signings, lectures, etc.
  • - Single-word reviews. Other people will read your review to discover why you liked or didn't like the title. Be descriptive.
  • - Comments focusing on the author or that may ruin the ending for others
  • - Phone numbers, addresses, URLs
  • - Pricing and availability information or alternative ordering information
  • - Advertisements or commercial solicitation


  • - By submitting a review, you grant to Barnes & and its sublicensees the royalty-free, perpetual, irrevocable right and license to use the review in accordance with the Barnes & Terms of Use.
  • - Barnes & reserves the right not to post any review -- particularly those that do not follow the terms and conditions of these Rules. Barnes & also reserves the right to remove any review at any time without notice.
  • - See Terms of Use for other conditions and disclaimers.
Search for Products You'd Like to Recommend

Recommend other products that relate to your review. Just search for them below and share!

Create a Pen Name

Your Pen Name is your unique identity on It will appear on the reviews you write and other website activities. Your Pen Name cannot be edited, changed or deleted once submitted.

Your Pen Name can be any combination of alphanumeric characters (plus - and _), and must be at least two characters long.

Continue Anonymously
Sort by: Showing 1 Customer Reviews
  • Anonymous

    Posted April 26, 2013

    Good for advanved programmers

    I like how it explains advanced things quickly. I can go from knowing nothing to having expert knowledge. Also gives inside perspective from development community; thats super important for pragmatists!

    Was this review helpful? Yes  No   Report this review
Sort by: Showing 1 Customer Reviews

If you find inappropriate content, please report it to Barnes & Noble
Why is this product inappropriate?
Comments (optional)