| |
Back
to BOOK PAGE
Table of ContentsPreface Chapter 1: Introduction Chapter 2: The Initial Problem Chapter 3: Laying the Foundations Chapter 4: Working with Rails Chapter 5: Building the User Interface Chapter 6: Into Production Chapter 7: Improving the User Experience Chapter 8: Extending the Application Chapter 9: Advanced Deployment Chapter 10: Down the Track Appendix A: Running Your Own Gem Server Index
- Chapter 1: Introduction
- Why this Book?
- Why Develop?
- Why a Client/Server Based Web Application?
- But why Ruby on Rails?
- Rails Handles Menial Tasks
- Clear Code
- Text Based File
- Open Source
- Plentiful Documentation
- Built-in Safe Test Environment
- Ruby on Rails in Detail
- Summary
- Chapter 2: The Initial Problem
- A Normal Day in the Office
- Examining the Data
- Data Objects
- Database Table Design Rules
- Separating the Data
- Naming Conventions
- Use Meaningful Names
- Use a Consistent Naming Convention
- Ruby on Rails Naming Conventions
- Constants and Classes
- Variables
- Methods and Properties
- Special Method and Property Suffixes
- Reserved Words
- Back to the Data
- Review the Result
- Project Preparation Steps
- How Good is the Source Data?
- Tracking Who does What
- No Log-On and No Authentication
- Simple Password Access
- User Log-On
- Recording Access History
- Access Control for Rory's Application
- Data Validation
- The Minimum Required Data is Entered
- Each Record can be Uniquely Identified
- Identify Fields that Need to Have a Particular Format
- References to Data in Other Tables Point to Actual Data
- Chapter 3: Laying the Foundations
- Supporting Rails Development
- Addressing the Challenges
- Setting Up a Rails Stack
- Installing a Rails Stack Using a Bundle
- Installing a Custom Rails Stack
- Installing Ruby and Rubygems
- Ruby on Windows
- Ruby on Linux
- Ruby on Mac OS X
- Installing Rails
- A Note on Rails Documentation
- Other Libraries
- Capistrano for Easier Deployment
- Mongrel: A Better Way to Run Rails Applications
- Choosing a Database Platform
- Installing MySQL
- Checking Your MySQL Installation
- MySQL GUI Tools
- Ruby-MySQL: Making Ruby and MySQL Work Better Together
- Instructions for Masochists
- In the Back Rooms at Acme…
- Version Control with Subversion
- Subversion Standard Practices
- Setting Up a Subversion Repository
- Setting Up a Project in Subversion
- Browsing Subversion from Eclipse
- Other Subversion Clients
- Using Other People's Servers
- Back at Acme
- Chapter 4: Working with Rails
- The World According to Rails
- Model-View-Controller Architecture
- Convention over Configuration
- Setting Up a New Rails Application
- Using Mongrel to Serve Your Application
- Connecting Rails to a Database
- Creating a Database and System Account
- Setting Up a Database Connection
- Configuring the Rails Environments
- Testing the Database Connection
- Troubleshooting a MySQL Connection
- ActiveRecord, Migrations, and Models
- Model == Table
- Which Comes First: The Model or The Table?
- Building a Model with Migrations
- Converting a Data Structure into a Migration
- Defining Columns in Migrations
- Other Operations Available in a Migration
- Running a Migration
- Rolling Back to a Previous Version of the Database
- The Scaffold
- Completing the Database
- The companies Table
- The addresses Table
- Generating the Remaining Tables
- Models in Detail
- Creating New Records in a Table via Models
- Finders
- Finding All of the Records in a Table
- Virtual Attributes
- Sorting Records
- Finding a Single Record
- Finding Records Matching Search Criteria
- Finding Records Using Attribute-Based Finders
- Finding Records by Raw SQL
- Writing a Custom Finder
- Viewing the SQL
- Viewing Logs in Eclipse
- Validation
- Validating People
- Validating Companies
- Validating Addresses
- Other Types of Validation
- Testing
- Setting Up for Testing
- Anatomy of a Test Case
- What Should be Tested?
- Fixtures
- Tests for the Person Model
- Other Types of Assertion
- Becoming Driven by Testing
- Associations between Models
- Parent to children (one-to-many): addresses to people
- Parent to child (one-to-one): addresses to companies
- Parent to children (one-to-many): companies to people
- Many-to-many relationships
- Dependencies
- Testing Associations
- Putting the Project into Context
- Storing a Project in Subversion
- Ignoring Temporary Files
- Committing Code to the Repository
- Processing Data
- Exporting the Data from Outlook
- Mapping a Text File to Database Tables
- Coding the Script
- Chapter 5: Building the User Interface
- Controllers and Views: A Recap
- Creating a Simple Controller and Its Views
- Views and Layouts
- Adding a View to the Application
- Displaying Model Instances in a View
- Pagination
- Linking to Another View
- Adding a Layout
- Adding a Stylesheet
- Adding a Controller for Companies
- Create the CompaniesController
- Create the Index View
- Test It!
- Summary
- Advanced View Techniques
- Custom Helpers
- Default Messages for Empty Fields
- Date Formatting
- Showing Associated Records
- Refining Using a Helper
- Showing an Address with a Partial
- Rendering Pagination Links with a Partial
- Adding a Menu
- C*UD (Create, Update, Delete)
- Creating a Person
- Refining with a Helper
- Validation Errors
- The Flash
- Finishing Touches
- Updating a Person
- Opportunities for Refactoring
- Using Filters
- Creating Application-Level Controller Methods
- Deleting a Person
- Adding Edit and Delete Links to a Person's Profile
- Editing Multiple Models Simultaneously
- Adding a New Address for a Person
- Using Functional Testing for Complex Actions
- Updating a Person and Their Address
- Summary
- Fleshing Out Companies and Addresses
- Managing Companies
- Stubbing Out the Navigation
- A Shared View to Confirm Deletions
- Attaching a Person to a Company
- Creating and Updating Companies
- Managing Addresses
- Adding a Callback to Company Deletions
- A Very Quick Interface for Addresses
- Chapter 6: Into Production
- An Application Ready for Production
- The Application Server
- Memory
- Central Processor Unit–CPU
- Hard Disks
- Network Interface Card–NIC
- Don't Forget Backup
- Your First Production Server
- Setting up the Server
- Installing Ruby and Rails
- Copying the Files to the Server
- Using Subversion to Transfer the Application to the Production Environment
- Excluding Files from the Repository
- The Production Database
- Separating Development and Production Databases
- Localhost database–single database.yml
- Separate Development and Production database.yml files
- Using Migration in Production
- The Rails Database User
- The Web Server
- Mongrel
- Mongrel Service on Windows
- Limitations of Mongrel
- Mongrel behind Apache
- Installing Apache
- Apache on Linux and Mac OS X
- Apache on Windows
- Domain Name System (DNS)
- Configuring Apache to Act as a Proxy for a Rails Application
- Rory's Production Installation
- Using Two Host Names to Simplify Routing
- Rory Puts his Intranet Application into Production
- Errors in Production
- Slow List Rendering due to Placement of Additional Data Processing in Loop
- Application Error Following the Transferring of New Code to Production
- Back Up Rails
- Backing Up the Code Repository
- Back Up the Database
- Combining Your Backup Scripts
- Chapter 7: Improving the User Experience
- Easy Access to the Application
- Use Routes to Simplify the Entry Point URL
- Build a Fast, Clear Home Page
- Users Need to be Able to Find Items Easily
- Use the Index View as the Core of the Search View
- Search–The First Attempt
- Do Not Trust User Input
- Handle Nothing
- Users Need to be Able to Search Without Knowing Exactly What They Are Looking for
- A Less Specific Search
- Case Insensitive Searches
- Adding AJAX to the Mix
- Make the AJAX Libraries Available to our Rails Application
- Enhancing Search with Auto-complete
- Auto-complete—Wow!, but...
- Use of AJAX—the Lessons Learned from Auto-Complete
- Show and Hide Company Address Using link_to_remote
- A Simple link_to_remote
- A DOM Object to Update
- Create a say_hello Action
- Increasing the Functionality of link_to_remote
- Show and Hide
- Alternating link_to_remote Elements
- Alternative Actions
- Debugging JavaScript
- Show/Hide within the Company Index List
- Using AJAX to Edit a Field in Line
- Render an AJAX Form via link_to_remote
- A Little script.aculo.us: Drag and Drop
- Make an Element Draggable
- A Place to Drop the Element
- Help!
- RDoc–Documentation for the Developer
- Help for the User
- Instiki Wiki Help
- The Best User Help Systems
- Keep Talking to Users
- Summary
- Chapter 8: Extending the Application
- Dealing with User Feedback
- Adding a Search Facility
- Handling Errors
- Catching Missing Record Errors
- Catching UnknownAction and Routing Errors
- Catching General Application-Level Errors
- Catching "Rails has Fallen Over" Errors
- Adding an Authentication System
- Cookies and Sessions in Rails
- Building the Authentication System
- The User Model
- Displaying the Login Form
- Checking Submitted Credentials
- Logging Out
- Protecting Actions
- Adding Simple Task Tracking
- The Task Model
- The Tasks Controller
- Task Views
- Showing Tasks for a Person
- Redirecting to a Person after Adding or Editing a Task
- Redirecting after a Deletion
- Handling the Cancel Link
- Setting a Default Person for a New Task
- Summary
- Uploading and Attaching Files
- Using Plugins
- Using acts_as_attachment for File Uploads
- Managing File Attachments for a Task
- Adding a Form for Attaching a File to a Task
- Adding a File Attachment to a Task
- Listing File Attachments for a Task
- Deleting File Attachments for a Task
- Protecting File Attachment Actions
- Chapter 9: Advanced Deployment
- Deployment with Capistrano
- Getting Started with Capistrano
- A Complete Deployment Recipe
- Preparing the Production Database
- First Deployment
- Migrating the Production Database
- Running Other Commands on the Server with invoke
- Managing Mongrel from Capistrano
- Centralizing File Uploads
- Upgrading the Application
- Cleaning Up Obsolete Releases
- Downgrading the Application
- Troubleshooting Deployment
- Incompatible Rails Versions
- Missing Libraries
- Incorrect Subversion Password or Repository Permissions
- User Doesn't Have SSH Access to the Server
- Inaccessible Application Server
- Inaccessible Database Server
- Dealing with the Inexplicable
- Getting Back to a Clean Slate
- Housekeeping
- Starting Mongrel Automatically
- Clearing Out Stale Sessions
- Keeping Log Files Manageable
- Optimizing a Rails Application
- Finding Bottlenecks
- Controller Action Profiling Using around_filter
- Profiling Everything
- The Rails Profiler
- Improving Application Performance with Caching
- How Cache Elements are Named
- Deciding What to Cache
- Preparing for Caching
- Page Caching
- Action Caching
- Fragment Caching
- Fragment Caching for Actions
- Avoiding Database Calls for Cached Fragments
- Clearing out the Cache
- Optimizing How Rails Uses the Database
- Ordering for Eager Loading
- Scaling Your Rails Infrastructure
- Using Apache to Serve Static Assets
- Proxying to a Mongrel Cluster
- Chapter 10: Down the Track
- Going off the Rails
- SQL
- Gathering Data from a Daughter Object's Daughter
- Using a model’s ActiveRecord connection
- Using GROUP BY to Summarize Data
- A Deeper Look at Aggregate Functions
- Business Processes
- To Be Successful, Build Successful Business Applications
- Automate Simple Repetitive Jobs
- Rapid and Detailed Reporting
- Ensure Customers Pay for the Goods and Services that the Business Provides
- Review of Business Activity Examples
- Dealing with Success
- Just Because You Can, Doesn't Mean You Should
- Bought in solutions Provide their Own Opportunities
- Ensure There is Time to Complete Each Task
Back to BOOK PAGE
| |
|