| |
| |
| |
Introduction | |
| |
| |
| |
Rails is Agile | |
| |
| |
| |
Finding Your Way Around | |
| |
| |
| |
Acknowledgments | |
| |
| |
| |
Stuff in Flux | |
| |
| |
| |
Getting Started | |
| |
| |
| |
The Architecture of Rails Applications | |
| |
| |
| |
Models, Views, and Controllers | |
| |
| |
| |
Active Record: Rails Model Support | |
| |
| |
| |
Action Pack: the View and Controller | |
| |
| |
| |
Installing Rails | |
| |
| |
| |
Installing on Windows | |
| |
| |
| |
Installing on Mac OS X | |
| |
| |
| |
Installing On Unix/Linux | |
| |
| |
| |
Rails and Databases | |
| |
| |
| |
Rails and ISPs | |
| |
| |
| |
Instant Gratification | |
| |
| |
| |
Creating a New Application | |
| |
| |
| |
Hello, Rails! | |
| |
| |
| |
Linking Pages Together | |
| |
| |
| |
What We Just Did | |
| |
| |
| |
Building an Application | |
| |
| |
| |
The Depot Application | |
| |
| |
| |
Incremental Development | |
| |
| |
| |
What Depot Does | |
| |
| |
| |
Let''s Code | |
| |
| |
| |
Task A: Product Maintenance | |
| |
| |
| |
Iteration A1: Get Something Running | |
| |
| |
| |
Iteration A2: Add a Missing Column | |
| |
| |
| |
Iteration A3: Validate! | |
| |
| |
| |
Iteration A4: Prettier Listings | |
| |
| |
| |
What We Just Did | |
| |
| |
| |
Task B: Catalog Display | |
| |
| |
| |
Iteration B1: Create the Catalog Listing | |
| |
| |
| |
Iteration B2: Add Page Decorations | |
| |
| |
| |
What We Just Did | |
| |
| |
| |
Task C: Cart Creation | |
| |
| |
| |
Sessions | |
| |
| |
| |
More Tables, More Models | |
| |
| |
| |
Iteration C1: Creating a Cart | |
| |
| |
| |
Iteration C2: Handling Errors | |
| |
| |
| |
Iteration C3: Finishing the Cart | |
| |
| |
| |
What We Just Did | |
| |
| |
| |
Task D: Checkout! | |
| |
| |
| |
Iteration D1: Capturing an Order | |
| |
| |
| |
Iteration D2: Show Cart Contents on Checkout | |
| |
| |
| |
What We Just Did | |
| |
| |
| |
Task E: Shipping 1 | |
| |
| |
| |
Iteration E1: Basic Shipping | |
| |
| |
| |
What We Just Did | |
| |
| |
| |
Task F: Administrivia | |
| |
| |
| |
Iteration F1: Adding Users | |
| |
| |
| |
Iteration F2: Logging In | |
| |
| |
| |
Iteration F3: Limiting Access | |
| |
| |
| |
Finishing Up | |
| |
| |
| |
More Icing on the Cake | |
| |
| |
| |
What We Just Did | |
| |
| |
| |
Task T: Testing | |
| |
| |
| |
Tests Baked Right In | |
| |
| |
| |
Testing Models | |
| |
| |
| |
Testing Controllers | |
| |
| |
| |
Using Mock Objects | |
| |
| |
| |
Test-Driven Development | |
| |
| |
| |
Running Tests with Rake | |
| |
| |
| |
Performance Testing | |
| |
| |
| |
What We Just Did | |
| |
| |
| |
Rails in Depth | |
| |
| |
| |
Rails in Depth 175 | |
| |
| |
| |
So Where''s Rails? | |
| |
| |
| |
Directory Structure | |
| |
| |
| |
Rails Configuration | |
| |
| |
| |
Naming Conventions | |
| |
| |
| |
Active Support | |
| |
| |
| |
Logging in Rails | |
| |
| |
| |
Debugging Hints | |
| |
| |
| |
What''s Next | |
| |
| |
| |
Active Record Basics | |
| |
| |
| |
Tables and Classes | |
| |
| |
| |
Columns and Attributes | |
| |
| |
| |
Primary Keys and IDs | |
| |
| |
| |
Connecting to the Database | |
| |
| |
| |
CRUD-Create, Read, Update, Delete | |
| |
| |
| |
Relationships Between Tables | |
| |
| |
| |
Transactions | |
| |
| |
| |
More Active Record | |
| |
| |
| |
Acts As | |
| |
| |
| |
Aggregation | |
| |
| |
| |
Single Table Inheritance | |
| |
| |
| |
Validation | |
| |
| |
| |
Callbacks | |
| |
| |
| |
Advanced Attributes | |
| |
| |
| |
Miscellany | |
| |
| |
| |
Action Controller and Rails | |
| |
| |
| |
Context and Dependencies | |
| |
| |
| |
The Basics | |
| |
| |
| |
Routing Requests | |
| |
| |
| |
Action Methods | |
| |
| |
| |
Cookies and Sessions | |
| |
| |
| |
Flash-Communicating Between Actions | |
| |
| |
| |
Filters and Verification | |
| |
| |
| |
Caching, Part One | |
| |
| |
| |
Action View | |
| |
| |
| |
Templates | |
| |
| |
| |
Builder templates | |
| |
| |
| |
RHTML Templates | |
| |
| |
| |
Helpers | |
| |
| |
| |
Formatting Helpers | |
| |
| |
| |
Linking to Other Pages and Resources | |
| |
| |
| |
Pagination | |
| |
| |
| |
Form Helpers | |
| |
| |
| |
Layouts and Components | |
| |
| |
| |
Caching, Part Two | |
| |
| |
| |
Adding New Templating Systems | |
| |
| |
| |
The Web, V2.0 | |
| |
| |
| |
Introducing Ajax | |
| |
| |
| |
The Rails Way | |
| |
| |
| |
The User Interface, Revisited | |
| |
| |
| |
Where To Go From Here | |
| |
| |
| |
Action Mailer | |
| |
| |
| |
Sending E-Mail | |
| |
| |
| |
Receiving E-Mail | |
| |
| |
| |
Testing E-Mail | |
| |
| |
| |
Web Services on Rails | |
| |
| |
| |
What AWS is (and What It Isn''t) | |
| |
| |
| |
The API Definition | |
| |
| |
| |
Dispatching Modes | |
| |
| |
| |
Using Alternate Dispatching | |
| |
| |
| |
Method Invocation Interception | |
| |
| |
| |
Testing Web Services | |
| |
| |
| |
Protocol Clients | |
| |
| |
| |
Securing Your Rails Application | |
| |
| |
| |
SQL Injection | |
| |
| |
| |
Cross Site Scripting (CSS/XSS) | |
| |
| |
| |
Avoid Session Fixation Attacks | |
| |
| |
| |
Creating Records Directly From Form Parameters | |
| |
| |
| |
Don''t Trust ID Parameters | |
| |
| |
| |
Don''t Expose Controller Methods | |
| |
| |
| |
File Uploads | |
| |
| |
| |
Don''t Cache Authenticated Pages | |
| |
| |
| |
Knowing That It Works | |
| |
| |
| |
Deployment and Scaling | |
| |
| |
| |
Picking a Production Platform | |
| |
| |
| |
A Trinity of Environments | |
| |
| |
| |
Iterating in the Wild | |
| |
| |
| |
Maintenance | |
| |
| |
| |
Scaling: The Share-Nothing Architecture | |
| |
| |
| |
Finding and Dealing With Bottlenecks | |
| |
| |
| |
Case Studies: Rails Running Daily | |
| |
| |
| |
Appendices A Introduction to Ruby | |
| |
| |
| |
Ruby Is an Object-Orien | |