SKIP THE SHIPPING
Use code NOSHIP during checkout to save 40% on eligible eBooks, now through January 5. Shop now.
Register your product to gain access to bonus material or receive a coupon.
This eBook includes the following formats, accessible from your Account page after purchase:
EPUB The open industry format known for its reflowable content and usability on supported mobile devices.
PDF The popular standard, used most often with the free Acrobat® Reader® software.
This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
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
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