Contents

Foreword by Steve Klabnik

Foreword to the Previous Edition by David Heinemeier Hansson

Foreword to the Previous Edition by Yehuda Katz

Introduction

Acknowledgments

About the Authors

Chapter 1 Rails Environments and Configuration

1.1 Bundler

1.1.1 Gemfile

1.1.2 Installing Gems

1.1.3 Gem Locking

1.1.4 Packaging Gems

1.2 Startup and Application Settings

1.2.1 config/application.rb

1.2.2 Initializers

1.2.3 Additional Configuration

1.2.4 Spring Application Preloader

1.3 Development Mode

1.3.1 Automatic Class Reloading

1.3.2 Eager Load

1.3.3 Error Reports

1.3.4 Caching

1.3.5 Raise Delivery Errors

1.3.6 Deprecation Notices

1.3.7 Pending Migrations Error Page

1.3.8 Assets Debug Mode

1.4 Test Mode

1.5 Production Mode

1.5.1 Assets

1.5.2 Asset Hosts

1.6 Configuring a Database

1.7 Configuring Application Secrets

1.8 Logging

1.8.1 Rails Log Files

1.8.2 Tagged Logging

1.8.3 Log File Analysis

1.9 Conclusion

Chapter 2 Routing

2.1 The Two Purposes of Routing

2.2 The routes.rb File

2.2.1 Regular Routes

2.2.2 Constraining Request Methods

2.2.3 URL Patterns

2.2.4 Segment Keys

2.2.5 Spotlight on the :id Field

2.2.6 Optional Segment Keys

2.2.7 Redirect Routes

2.2.8 The Format Segment

2.2.9 Routes as Rack Endpoints

2.2.10 Accept Header

2.2.11 Segment Key Constraints

2.2.12 The Root Route

2.3 Route Globbing

2.4 Named Routes

2.4.1 Creating a Named Route

2.4.2 name_path versus name_url

2.4.3 What to Name Your Routes

2.4.4 Argument Sugar

2.4.5 A Little More Sugar with Your Sugar?

2.5 Scoping Routing Rules

2.5.1 Controller

2.5.2 Path Prefix

2.5.3 Name Prefix

2.5.4 Namespaces

2.5.5 Bundling Constraints

2.6 Listing Routes

2.7 Conclusion

Chapter 3 REST, Resources, and Rails

3.1 REST in a Rather Small Nutshell

3.2 Resources and Representations

3.3 REST in Rails

3.4 Routing and CRUD

3.4.1 REST Resources and Rails

3.4.2 From Named Routes to REST Support

3.4.3 Reenter the HTTP Verb

3.5 The Standard RESTful Controller Actions

3.5.1 PATCH versus PUT

3.5.2 Singular and Plural RESTful Routes

3.5.3 The Special Pairs: new/create and edit/update

3.5.4 The PATCH and DELETE Cheat

3.5.5 Limiting Routes Generated

3.6 Singular Resource Routes

3.7 Nested Resources

3.7.1 RESTful Controller Mappings

3.7.2 Considerations

3.7.3 Deep Nesting?

3.7.4 Shallow Routes

3.8 Routing Concerns

3.9 RESTful Route Customizations

3.9.1 Extra Member Routes

3.9.2 Extra Collection Routes

3.9.3 Custom Action Names

3.9.4 Mapping to a Different Controller

3.9.5 Routes for New Resources

3.9.6 Considerations for Extra Routes

3.10 Controller-Only Resources

3.11 Different Representations of Resources

3.11.1 The respond_to Method

3.11.2 Formatted Named Routes

3.12 The RESTful Rails Action Set

3.12.1 Index

3.12.2 Show

3.12.3 Destroy

3.12.4 New and Create

3.12.5 Edit and Update

3.13 Conclusion

Chapter 4 Working with Controllers

4.1 Rack

4.1.1 Configuring Your Middleware Stack

4.2 Action Dispatch: Where It All Begins

4.2.1 Request Handling

4.2.2 Getting Intimate with the Dispatcher

4.3 Render unto View...

4.3.1 When in Doubt, Render

4.3.2 Explicit Rendering

4.3.3 Rendering Another Action’s Template

4.3.4 Rendering a Different Template Altogether

4.3.5 Rendering a Partial Template

4.3.6 Rendering Inline Template Code

4.3.7 Rendering Text

4.3.8 Rendering Other Types of Structured Data

4.3.9 Rendering Nothing

4.3.10 Rendering Options

4.4 Additional Layout Options

4.5 Redirecting

4.5.1 The redirect_to Method

4.6 Controller/View Communication

4.7 Action Callbacks

4.7.1 Action Callback Inheritance

4.7.2 Action Callback Types

4.7.3 Action Callback Chain Ordering

4.7.4 Around Action Callbacks

4.7.5 Action Callback Chain Skipping

4.7.6 Action Callback Conditions

4.7.7 Action Callback Chain Halting

4.8 Streaming

4.8.1 ActionController::Live

4.8.2 View Streaming via render stream: true

4.8.3 send_data(data, options = {})

4.8.4 send_file(path, options = {})

4.9 Variants

4.10 Conclusion

Chapter 5 Working with Active Record

5.1 The Basics

5.2 Macro-Style Methods

5.2.1 Relationship Declarations

5.2.2 Convention over Configuration

5.2.3 Setting Names Manually

5.2.4 Legacy Naming Schemes

5.3 Defining Attributes

5.3.1 Default Attribute Values

5.3.2 Serialized Attributes

5.3.3 ActiveRecord::Store

5.4 CRUD: Create, Read, Update, and Delete

5.4.1 Creating New Active Record Instances

5.4.2 Reading Active Record Objects

5.4.3 Reading and Writing Attributes

5.4.4 Accessing and Manipulating Attributes before They Are Typecast

5.4.5 Reloading

5.4.6 Cloning

5.4.7 Custom SQL Queries

5.4.8 The Query Cache

5.4.9 Updating

5.4.10 Updating by Condition

5.4.11 Updating a Particular Instance

5.4.12 Updating Specific Attributes

5.4.13 Convenience Updaters

5.4.14 Touching Records

5.4.15 readonly Attributes

5.4.16 Deleting and Destroying

5.5 Database Locking

5.5.1 Optimistic Locking

5.5.2 Pessimistic Locking

5.5.3 Considerations

5.6 Where Clauses

5.6.1 where(*conditions)

5.6.2 order(*clauses)

5.6.3 limit(number) and offset(number)

5.6.4 select(*clauses)

5.6.5 from(*tables)

5.6.6 exists?

5.6.7 extending(*modules, &block)

5.6.8 group(*args)

5.6.9 having(*clauses)

5.6.10 includes(*associations)

5.6.11 joins

5.6.12 none

5.6.13 readonly

5.6.14 references

5.6.15 reorder

5.6.16 reverse_order

5.6.17 uniq / distinct

5.6.18 unscope(*args)

5.6.19 arel_table

5.7 Connections to Multiple Databases in Different Models

5.8 Using the Database Connection Directly

5.8.1 The DatabaseStatements Module

5.8.2 Other Connection Methods

5.9 Other Configuration Options

5.10 Conclusion

Chapter 6 Active Record Migrations

6.1 Creating Migrations

6.1.1 Sequencing Migrations

6.1.2 change

6.1.3 reversible

6.1.4 Irreversible Migrations

6.1.5 create_table(name, options, &block)

6.1.6 change_table(table_name, &block)

6.1.7 create_join_table

6.1.8 API Reference

6.1.9 Defining Columns

6.1.10 Command-Line Column Declarations

6.2 Data Migration

6.2.1 Using SQL

6.2.2 Migration Models

6.3 schema.rb

6.4 Database Seeding

6.5 Database-Related Rake Tasks

6.5.1 db:migrate:status

6.6 Conclusion

Chapter 7 Active Record Associations

7.1 The Association Hierarchy

7.2 One-to-Many Relationships

7.2.1 Adding Associated Objects to a Collection

7.2.2 Association Collection Methods

7.3 The belongs_to Association

7.3.1 Reloading the Association

7.3.2 Building and Creating Related Objects via the Association

7.3.3 belongs_to Options

7.3.4 belongs_to Scopes

7.4 The has_many Association

7.4.1 has_many Options

7.4.2 has_many Scopes

7.5 Many-to-Many Relationships

7.5.1 has_and_belongs_to_many

7.5.2 has_many :through

7.5.3 has_many :through Options

7.5.4 Unique Association Objects

7.6 One-to-One Relationships

7.6.1 has_one

7.6.2 has_one Scopes

7.7 Working with Unsaved Objects and Associations

7.7.1 One-to-One Associations

7.7.2 Collections

7.7.3 Deletion

7.8 Association Extensions

7.9 The CollectionProxy Class

7.10 Conclusion

Chapter 8 Validations

8.1 Finding Errors

8.2 The Simple Declarative Validations

8.2.1 validates_absence_of

8.2.2 validates_acceptance_of

8.2.3 validates_associated

8.2.4 validates_confirmation_of

8.2.5 validates_each

8.2.6 validates_format_of

8.2.7 validates_inclusion_of and validates_exclusion_of

8.2.8 validates_length_of

8.2.9 validates_numericality_of

8.2.10 validates_presence_of

8.2.11 validates_uniqueness_of

8.2.12 validates_with

8.2.13 RecordInvalid

8.3 Common Validation Options

8.3.1 :allow_blank and :allow_nil

8.3.2 :if and :unless

8.3.3 :message

8.3.4 :on

8.3.5 :strict

8.4 Conditional Validation

8.4.1 Usage and Considerations

8.4.2 Validation Contexts

8.5 Short-Form Validation

8.6 Custom Validation Techniques

8.6.1 Add Custom Validation Macros to Your Application

8.6.2 Create a Custom Validator Class

8.6.3 Add a validate Method to Your Model

8.7 Skipping Validations

8.8 Working with the Errors Hash

8.8.1 Checking for Errors

8.9 Testing Validations with Shoulda

8.10 Conclusion

Chapter 9 Advanced Active Record

9.1 Scopes

9.1.1 Scope Parameters

9.1.2 Chaining Scopes

9.1.3 Scopes and has_many

9.1.4 Scopes and Joins

9.1.5 Scope Combinations

9.1.6 Default Scopes

9.1.7 Using Scopes for CRUD

9.2 Callbacks

9.2.1 One-Liners

9.2.2 Protected or Private

9.2.3 Matched before/after Callbacks

9.2.4 Halting Execution

9.2.5 Callback Usages

9.2.6 Special Callbacks: after_initialize and after_find

9.2.7 Callback Classes

9.3 Calculation Methods

9.3.1 average(column_name, *options)

9.3.2 count(column_name, *options)

9.3.3 ids

9.3.4 maximum(column_name, *options)

9.3.5 minimum(column_name, *options)

9.3.6 pluck(*column_names)

9.3.7 sum(column_name, *options)

9.4 Single-Table Inheritance (STI)

9.4.1 Mapping Inheritance to the Database

9.4.2 STI Considerations

9.4.3 STI and Associations

9.5 Abstract Base Model Classes

9.6 Polymorphic has_many Relationships

9.6.1 In the Case of Models with Comments

9.7 Enums

9.8 Foreign-Key Constraints

9.9 Modules for Reusing Common Behavior

9.9.1 A Review of Class Scope and Contexts

9.9.2 The included Callback

9.10 Modifying Active Record Classes at Runtime

9.10.1 Considerations

9.10.2 Ruby and Domain-Specific Languages

9.11 Using Value Objects

9.11.1 Immutability

9.12 Nonpersisted Models

9.13 PostgreSQL Enhancements

9.13.1 Schemaless Data with hstore

9.13.2 Array Type

9.13.3 Network Address Types

9.13.4 UUID Type

9.13.5 Range Types

9.13.6 JSON Type

9.14 Conclusion

Chapter 10 Action View

10.1 Layouts and Templates

10.1.1 Template Filename Conventions

10.1.2 Layouts

10.1.3 Yielding Content

10.1.4 Conditional Output

10.1.5 Decent Exposure

10.1.6 Standard Instance Variables

10.1.7 Displaying flash Messages

10.1.8 flash.now

10.2 Partials

10.2.1 Simple Use Cases

10.2.2 Reuse of Partials

10.2.3 Shared Partials

10.2.4 Passing Variables to Partials

10.2.5 Rendering an Object

10.2.6 Rendering Collections

10.2.7 Logging

10.3 Conclusion

Chapter 11 All about Helpers

11.1 ActiveModelHelper

11.1.1 Reporting Validation Errors

11.1.2 Automatic Form Creation

11.1.3 Customizing the Way Validation Errors Are Highlighted

11.2 AssetTagHelper

11.2.1 Head Helpers

11.2.2 Asset Helpers

11.2.3 Using Asset Hosts

11.2.4 For Plugins Only

11.3 AtomFeedHelper

11.4 CacheHelper

11.5 CaptureHelper

11.6 CsrfHelper

11.7 DateHelper

11.7.1 The Date and Time Selection Helpers

11.7.2 The Individual Date and Time Select Helpers

11.7.3 Common Options for Date Selection Helpers

11.7.4 distance_in_time Methods with Complex Descriptive Names

11.7.5 time_tag(date_or_time, *args, &block)

11.8 DebugHelper

11.9 FormHelper

11.9.1 Creating Forms for Models

11.9.2 How Form Helpers Get Their Values

11.9.3 Integrating Additional Objects in One Form

11.9.4 Customized Form Builders

11.9.5 Form Inputs

11.10 FormOptionsHelper

11.10.1 Select Helpers

11.10.2 Check Box/Radio Helpers

11.10.3 Option Helpers

11.11 FormTagHelper

11.12 JavaScriptHelper

11.13 NumberHelper

11.14 OutputSafetyHelper

11.15 RecordTagHelper

11.16 RenderingHelper

11.17 SanitizeHelper

11.18 TagHelper

11.19 TextHelper

11.20 TranslationHelper and the I18n API

11.20.1 Localized Views

11.20.2 TranslationHelper Methods

11.20.3 I18n Setup

11.20.4 Setting and Passing the Locale

11.20.5 Setting Locale from Client-Supplied Information

11.20.6 Internationalizing Your Application

11.20.7 Organization of Locale Files

11.20.8 Looking Up Translations

11.20.9 How to Store Your Custom Translations

11.20.10 Overview of Other Built-In Methods That Provide I18n Support

11.20.11 Exception Handling

11.21 UrlHelper

11.22 Writing Your Own View Helpers

11.22.1 Small Optimizations: The Title Helper

11.22.2 Encapsulating View Logic: The photo_for Helper

11.22.3 Smart View: The breadcrumbs Helper

11.23 Wrapping and Generalizing Partials

11.23.1 A tiles Helper

11.23.2 Generalizing Partials

11.24 Conclusion

Chapter 12 Haml

12.1 Getting Started

12.2 The Basics

12.2.1 Creating an Element

12.2.2 Attributes

12.2.3 Classes and IDs

12.2.4 Implicit Divs

12.2.5 Empty Tags

12.3 Doctype

12.4 Comments

12.4.1 HTML Comments

12.4.2 Haml Comments

12.5 Evaluating Ruby Code

12.5.1 Interpolation

12.5.2 Escaping/Unescaping HTML

12.5.3 Escaping the First Character of a Line

12.5.4 Multiline Declarations

12.6 Helpers

12.6.1 Object Reference []

12.6.2 page_class

12.6.3 list_of(enum, opts = {}) { |item| ... }

12.7 Filters

12.8 Haml and Content

12.9 Configuration Options

12.9.1 autoclose

12.9.2 cdata

12.9.3 compiler_class

12.9.4 Encoding

12.9.5 escape_attrs

12.9.6 escape_html

12.9.7 format

12.9.8 hyphenate_data_attrs

12.9.9 mime_type

12.9.10 parser_class

12.9.11 preserve

12.9.12 remove_whitespace

12.9.13 ugly

12.10 Conclusion

Chapter 13 Session Management

13.1 What to Store in the Session

13.1.1 The Current User

13.1.2 Session Use Guidelines

13.2 Session Options

13.3 Storage Mechanisms

13.3.1 Active Record Session Store

13.3.2 Memcached Session Storage

13.3.3 The Controversial CookieStore

13.3.4 Cleaning Up Old Sessions

13.4 Cookies

13.4.1 Reading and Writing Cookies

13.5 Conclusion

Chapter 14 Authentication and Authorization

14.1 Devise

14.1.1 Getting Started

14.1.2 Modules

14.1.3 Models

14.1.4 Controllers

14.1.5 Views

14.1.6 Configuration

14.1.7 Strong Parameters

14.1.8 Extensions

14.1.9 Testing with Devise

14.1.10 Summary

14.2 has_secure_password

14.2.1 Getting Started

14.2.2 Creating the Models

14.2.3 Setting Up the Controllers

14.2.4 Controller, Limiting Access to Actions

14.2.5 Summary

14.3 Pundit

14.3.1 Getting Started

14.3.2 Creating a Policy

14.3.3 Controller Integration

14.3.4 Policy Scopes

14.3.5 Strong Parameters

14.3.6 Testing Policies

14.4 Conclusion

Chapter 15 Security

15.1 Password Management

15.2 Log Masking

15.3 SSL (Secure Sockets Layer)

15.4 Model Mass-Assignment Attributes Protection

15.5 SQL Injection

15.5.1 What Is an SQL Injection?

15.6 Cross-Site Scripting (XSS)

15.6.1 HTML Escaping

15.6.2 HTML Sanitization

15.6.3 Input versus Output Escaping

15.7 XSRF (Cross-Site Request Forgery)

15.7.1 Restricting HTTP Method for Actions with Side Effects

15.7.2 Require Security Token for Protected Requests

15.7.3 Client-Side Security Token Handling

15.8 Session Fixation Attacks

15.9 Keeping Secrets

15.10 Conclusion

Chapter 16 Action Mailer

16.1 Setup

16.2 Mailer Models

16.2.1 Preparing Outbound Email Messages

16.2.2 HTML Email Messages

16.2.3 Multipart Messages

16.2.4 Attachments

16.2.5 Generating URLs

16.2.6 Mailer Layouts

16.2.7 Sending an Email

16.2.8 Callbacks

16.3 Receiving Emails

16.3.1 Handling Incoming Attachments

16.4 Server Configuration

16.5 Testing Email Content

16.6 Previews

16.7 Conclusion

Chapter 17 Caching and Performance

17.1 View Caching

17.1.1 Page Caching

17.1.2 Action Caching

17.1.3 Fragment Caching

17.1.4 Russian Doll Caching

17.1.5 Conditional Caching

17.1.6 Expiration of Cached Content

17.1.7 Automatic Cache Expiry with Sweepers

17.1.8 Avoiding Extra Database Activity

17.1.9 Cache Logging

17.1.10 Cache Storage

17.2 Data Caching

17.2.1 Eliminating Extra Database Lookups

17.2.2 Initializing New Caches

17.2.3 fetch Options

17.3 Control of Web Caching

17.3.1 expires_in(seconds, options = )

17.3.2 expires_now

17.4 ETags

17.4.1 fresh_when(options)

17.4.2 stale?(options)

17.5 Conclusion

Chapter 18 Background Processing

18.1 Delayed Job

18.1.1 Getting Started

18.1.2 Creating Jobs

18.1.3 Running

18.1.4 Summary

18.2 Sidekiq

18.2.1 Getting Started

18.2.2 Workers

18.2.3 Scheduled Jobs

18.2.4 Delayed Action Mailer

18.2.5 Running

18.2.6 Error Handling

18.2.7 Monitoring

18.2.8 Summary

18.3 Resque

18.3.1 Getting Started

18.3.2 Creating Jobs

18.3.3 Hooks

18.3.4 Plugins

18.3.5 Running

18.3.6 Monitoring

18.3.7 Summary

18.4 Rails Runner

18.4.1 Getting Started

18.4.2 Usage Notes

18.4.3 Considerations

18.4.4 Summary

18.5 Conclusion

Chapter 19 Ajax on Rails

19.0.1 Firebug

19.1 Unobtrusive JavaScript

19.1.1 UJS Usage

19.1.2 Helpers

19.1.3 jQuery UJS Custom Events

19.2 Turbolinks

19.2.1 Turbolinks Usage

19.2.2 Turbolinks Events

19.2.3 Controversy

19.3 Ajax and JSON

19.3.1 Ajax link_to

19.4 Ajax and HTML

19.5 Ajax and JavaScript

19.6 Conclusion

Chapter 20 Asset Pipeline

20.1 Asset Pipeline

20.2 Wish List

20.3 The Big Picture

20.4 Organization: Where Does Everything Go?

20.5 Manifest Files

20.5.1 Manifest Directives

20.5.2 Search Path

20.5.3 Gemified Assets

20.5.4 Index Files

20.5.5 Format Handlers

20.6 Custom Format Handlers

20.7 Postprocessing

20.7.1 Stylesheets

20.7.2 JavaScripts

20.7.3 Custom Compressor

20.8 Helpers

20.8.1 Images

20.8.2 Getting the URL of an Asset File

20.8.3 Built-In SASS Asset Path Helpers

20.8.4 Data URIs

20.9 Fingerprinting

20.10 Serving the Files

20.10.1 GZip Compression

20.11 Rake Tasks

20.12 Conclusion

Chapter 21 RSpec

21.1 Introduction

21.2 Basic Syntax and API

21.2.1 describe and context

21.2.2 let(:name) { expression }

21.2.3 let!(:name) { expression }

21.2.4 before and after

21.2.5 it

21.2.6 specify

21.2.7 pending

21.2.8 expect(...).to / expect(...).not_to

21.2.9 Implicit Subject

21.2.10 Explicit Subject

21.3 Matchers

21.4 Custom Expectation Matchers

21.4.1 Custom Matcher DSL

21.4.2 Fluent Chaining

21.5 Shared Behaviors

21.6 Shared Context

21.7 RSpec’s Mocks and Stubs

21.7.1 Test Doubles

21.7.2 Null Objects

21.7.3 Method Stubs

21.7.4 Partial Mocking and Stubbing

21.7.5 receive_message_chain

21.8 Running Specs

21.9 RSpec Rails Gem

21.9.1 Installation

21.9.2 Model Specs

21.9.3 Controller Specs

21.9.4 View Specs

21.9.5 Helper Specs

21.9.6 Feature Specs

21.10 RSpec Tools

21.10.1 Guard-RSpec

21.10.2 Spring

21.10.3 Specjour

21.10.4 SimpleCov

21.11 Conclusion

Chapter 22 XML

22.1 The to_xml Method

22.1.1 Customizing to_xml Output

22.1.2 Associations and to_xml

22.1.3 Advanced to_xml Usage

22.1.4 Dynamic Runtime Attributes

22.1.5 Overriding to_xml

22.2 The XML Builder

22.3 Parsing XML

22.3.1 Turning XML into Hashes

22.3.2 Typecasting

22.4 Conclusion

Appendix A Active Model API Reference

A.1 AttributeMethods

A.1.1 active_model/attribute_methods.rb

A.2 Callbacks

A.2.1 active_model/callbacks.rb

A.3 Conversion

A.3.1 active_model/conversion.rb

A.4 Dirty

A.4.1 active_model/dirty.rb

A.5 Errors

A.5.1 active_model/errors.rb

A.6 ForbiddenAttributesError

A.7 Lint::Tests

A.8 Model

A.9 Name

A.9.1 active_model/naming.rb

A.10 Naming

A.10.1 active_model/naming.rb

A.11 SecurePassword

A.12 Serialization

A.12.1 active_model/serialization.rb

A.13 Serializers::JSON

A.13.1 active_model/serializers/json.rb

A.14 Serializers::Xml

A.14.1 active_model/serializers/xml.rb

A.15 Translation

A.15.1 active_model/translation.rb

A.16 Validations

A.16.1 active_model/validations

A.16.2 active_model/validations/absence

A.16.3 active_model/validations/acceptance

A.16.4 active_model/validations/callbacks

A.16.5 active_model/validations/confirmation

A.16.6 active_model/validations/exclusion

A.16.7 active_model/validations/format

A.16.8 active_model/validations/inclusion

A.16.9 active_model/validations/length

A.16.10 active_model/validations/numericality

A.16.11 active_model/validations/presence

A.16.12 active_model/validations/validates

A.16.13 active_model/validations/with

A.17 Validator

A.17.1 active_model/validator.rb

Appendix B Active Support API Reference

B.1 Array

B.1.1 active_support/core_ext/array/access

B.1.2 active_support/core_ext/array/conversions

B.1.3 active_support/core_ext/array/extract_options

B.1.4 active_support/core_ext/array/grouping

B.1.5 active_support/core_ext/array/prepend_and_append

B.1.6 active_support/core_ext/array/wrap

B.1.7 active_support/core_ext/object/blank

B.1.8 active_support/core_ext/object/to_param

B.2 ActiveSupport::BacktraceCleaner

B.2.1 active_support/backtrace_cleaner

B.3 Benchmark

B.3.1 ms

B.4 ActiveSupport::Benchmarkable

B.4.1 active_support/benchmarkable

B.5 BigDecimal

B.5.1 active_support/core_ext/big_decimal/conversions

B.5.2 active_support/json/encoding

B.6 ActiveSupport::Cache::Store

B.7 ActiveSupport::CachingKeyGenerator

B.7.1 active_support/key_generator

B.8 ActiveSupport::Callbacks

B.8.1 active_support/callbacks

B.9 Class

B.9.1 active_support/core_ext/class/attribute

B.9.2 active_support/core_ext/class/attribute_accessors

B.9.3 active_support/core_ext/class/attribute_accessors

B.9.4 active_support/core_ext/class/delegating_attributes

B.9.5 active_support/core_ext/class/subclasses

B.10 ActiveSupport::Concern

B.10.1 active_support/concern

B.11 ActiveSupport::Concurrency

B.11.1 ActiveSupport::Concurrency::Latch

B.12 ActiveSupport::Configurable

B.12.1 active_support/configurable

B.13 Date

B.13.1 active_support/core_ext/date/acts_like

B.13.2 active_support/core_ext/date/calculations

B.13.3 active_support/core_ext/date/conversions

B.13.4 active_support/core_ext/date/zones

B.13.5 active_support/json/encoding

B.14 DateTime

B.14.1 active_support/core_ext/date_time/acts_like

B.14.2 active_support/core_ext/date_time/calculations

B.14.3 active_support/core_ext/date_time/conversions

B.14.4 active_support/core_ext/date_time/zones

B.14.5 active_support/json/encoding

B.15 ActiveSupport::Dependencies

B.15.1 active_support/dependencies

B.15.2 active_support/dependencies/autoload

B.16 ActiveSupport::Deprecation

B.16.1 active_support/deprecation

B.17 ActiveSupport::DescendantsTracker

B.17.1 active_support/descendants_tracker

B.18 ActiveSupport::Duration

B.18.1 active_support/duration

B.19 Enumerable

B.19.1 active_support/core_ext/enumerable

B.19.2 active_support/json/encoding

B.20 ERB::Util

B.20.1 active_support/core_ext/string/output_safety

B.21 FalseClass

B.21.1 active_support/core_ext/object/blank

B.21.2 active_support/json/encoding

B.22 File

B.22.1 active_support/core_ext/file/atomic

B.23 Hash

B.23.1 active_support/core_ext/hash/compact

B.23.2 active_support/core_ext/hash/conversions

B.23.3 active_support/core_ext/hash/deep_merge

B.23.4 active_support/core_ext/hash/except

B.23.5 active_support/core_ext/hash/indifferent_access

B.23.6 active_support/core_ext/hash/keys

B.23.7 active_support/core_ext/hash/reverse_merge

B.23.8 active_support/core_ext/hash/slice

B.23.9 active_support/core_ext/object/to_param

B.23.10 active_support/core_ext/object/to_query

B.23.11 active_support/json/encoding

B.23.12 active_support/core_ext/object/blank

B.24 ActiveSupport::Gzip

B.24.1 active_support/gzip

B.25 ActiveSupport::HashWithIndifferentAccess

B.25.1 active_support/hash_with_indifferent_access

B.26 ActiveSupport::Inflector::Inflections

B.26.1 active_support/inflector/inflections

B.26.2 active_support/inflector/transliterate

B.27 Integer

B.27.1 active_support/core_ext/integer/inflections

B.27.2 active_support/core_ext/integer/multiple

B.28 ActiveSupport::JSON

B.28.1 active_support/json/decoding

B.28.2 active_support/json/encoding

B.29 Kernel

B.29.1 active_support/core_ext/kernel/agnostics

B.29.2 active_support/core_ext/kernel/debugger

B.29.3 active_support/core_ext/kernel/reporting

B.29.4 active_support/core_ext/kernel/singleton_class

B.30 ActiveSupport::KeyGenerator

B.30.1 active_support/key_generator

B.31 ActiveSupport::Logger

B.31.1 active_support/logger

B.31.2 active_support/logger_silence

B.32 ActiveSupport::MessageEncryptor

B.32.1 active_support/message_encryptor

B.33 ActiveSupport::MessageVerifier

B.33.1 active_support/message_verifier

B.34 Module

B.34.1 active_support/core_ext/module/aliasing

B.34.2 active_support/core_ext/module/anonymous

B.34.3 active_support/core_ext/module/attr_internal

B.34.4 active_support/core_ext/module/attribute_accessors

B.34.5 active_support/core_ext/module/concerning

B.34.6 active_support/core_ext/module/delegation

B.34.7 active_support/core_ext/module/deprecation

B.34.8 active_support/core_ext/module/introspection

B.34.9 active_support/core_ext/module/qualified_const

B.34.10 active_support/core_ext/module/reachable

B.34.11 active_support/core_ext/module/remove_method

B.34.12 active_support/dependencies

B.35 ActiveSupport::Multibyte::Chars

B.35.1 active_support/multibyte/chars

B.35.2 active_support/multibyte/unicode

B.36 NilClass

B.36.1 active_support/core_ext/object/blank

B.36.2 active_support/json/encoding

B.37 ActiveSupport::Notifications

B.37.1 active_support/core_ext/object/blank

B.37.2 active_support/json/encoding

B.37.3 active_support/core_ext/numeric/bytes

B.37.4 active_support/core_ext/numeric/conversions

B.37.5 active_support/core_ext/numeric/time

B.38 Object

B.38.1 active_support/core_ext/object/acts_like

B.38.2 active_support/core_ext/object/blank

B.38.3 active_support/core_ext/object/deep_dup

B.38.4 active_support/core_ext/object/duplicable

B.38.5 active_support/core_ext/object/inclusion

B.38.6 active_support/core_ext/object/instance_variables

B.38.7 active_support/core_ext/object/json

B.38.8 active_support/core_ext/object/to_param

B.38.9 active_support/core_ext/object/to_query

B.38.10 active_support/core_ext/object/try

B.38.11 active_support/core_ext/object/with_options

B.38.12 active_support/dependencies

B.39 ActiveSupport::OrderedHash

B.39.1 active_support/ordered_hash

B.40 ActiveSupport::OrderedOptions

B.40.1 active_support/ordered_options

B.41 ActiveSupport::PerThreadRegistry

B.41.1 active_support/per_thread_registry

B.42 ActiveSupport::ProxyObject

B.42.1 active_support/proxy_object

B.43 ActiveSupport::Railtie

B.43.1 active_support/railtie

B.44 Range

B.44.1 active_support/core_ext/range/conversions

B.44.2 active_support/core_ext/range/each

B.44.3 active_support/core_ext/range/include_range

B.44.4 active_support/core_ext/range/overlaps

B.44.5 active_support/core_ext/enumerable

B.45 Regexp

B.45.1 active_support/core_ext/regexp

B.45.2 active_support/json/encoding

B.46 ActiveSupport::Rescuable

B.46.1 active_support/rescuable

B.47 String

B.47.1 active_support/json/encoding

B.47.2 active_support/core_ext/object/blank

B.47.3 active_support/core_ext/string/access

B.47.4 active_support/core_ext/string/behavior

B.47.5 active_support/core_ext/string/conversions

B.47.6 active_support/core_ext/string/exclude

B.47.7 active_support/core_ext/string/filters

B.47.8 active_support/core_ext/string/indent

B.47.9 active_support/core_ext/string/inflections

B.47.10 active_support/core_ext/string/inquiry

B.47.11 active_support/core_ext/string/multibyte

B.47.12 active_support/core_ext/string/output_safety

B.47.13 active_support/core_ext/string/starts_ends_with

B.47.14 active_support/core_ext/string/strip

B.47.15 active_support/core_ext/string/in_time_zone

B.48 ActiveSupport::StringInquirer

B.49 Struct

B.49.1 active_support/core_ext/struct

B.50 ActiveSupport::Subscriber

B.51 Symbol

B.51.1 active_support/json/encoding

B.52 ActiveSupport::TaggedLogging

B.52.1 active_support/tagged_logger

B.53 ActiveSupport::TestCase

B.53.1 active_support/test_case

B.54 ActiveSupport::Testing::Assertions

B.54.1 active_support/testing/assertions

B.54.2 active_support/testing/time_helpers

B.55 Thread

B.55.1 active_support/core_ext/thread

B.56 Time

B.56.1 active_support/json/encoding

B.56.2 active_support/core_ext/time/acts_like

B.56.3 active_support/core_ext/time/calculations

B.56.4 active_support/core_ext/time/conversions

B.56.5 active_support/core_ext/time/marshal

B.56.6 active_support/core_ext/time/zones

B.57 ActiveSupport::TimeWithZone

B.58 ActiveSupport::TimeZone

B.58.1 active_support/values/time_zone

B.59 TrueClass

B.59.1 active_support/core_ext/object/blank

B.59.2 active_support/json/encoding

B.60 ActiveSupport::XmlMini

B.60.1 active_support/xml_mini

Appendix C Rails Essentials

C.1 Environmental Concerns

C.1.1 Operating System

C.1.2 Aliases

C.2 Essential Gems

C.2.1 Better Errors

C.2.2 Country Select

C.2.3 Debugger

C.2.4 Draper

C.2.5 Kaminari

C.2.6 Nested Form Fields

C.2.7 Pry and Friends

C.2.8 Rails Admin

C.2.9 Simple Form

C.2.10 State Machine

C.3 Ruby Toolbox

C.4 Screencasts

C.4.1 Railcasts

Index

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.15.219.130