Active
Record Relationships
Dealing with relationships is one of the
most important jobs of persistence frameworks. The best persistence
frameworks handle relationships with excellent performance for the
end user and simplicity for the developer. Active Record takes
advantage of the Ruby language and naming conventions to simplify
both access and configuration of related data. In this chapter,
we'll focus on building relationships between tables, and
reflecting those relationships in your model objects.
With validation, shown in the previous chapter,
you began to see the domain-specific language built into Active
Record. We'll use that language to define relationships between the
objects in our database. Three components specify a relationship:
the relationship itself, the association or target, and named
parameters. More precisely, these
are:
relationship
-
A method, defined through
ActiveRecord::Base, which defines the behavior of the
relationship.
association(s)
-
A symbol that specifies the target of the
relationship. The symbol may be singular or plural, based on the
cardinality of the target.
named
parameters
-
Like all Ruby methods, the relationship can take
an optional number of named parameters, which may also have default
values.
A statement defining a relationship has the
form:
relationship :association :parameter1 => value, :parameter2 => value,...
For example, you might have:
class Slideshow < ActiveRecord::Base
has_many :photos :order => position
Using this small amount of language, you'll be
able to define complex relationships quickly. Your relationships
will also be easy to read and maintain. Let's implement the full
model for Photo Share, complete with relationships.
|
Relational databases are fundamentally based on different kinds of
relationships between tables. A set of table columns called
keys provides the structure for
all relationships. A primary key
is a set of columns in a table that uniquely identify a row within
that same table. A foreign key is
a set of columns in a table that uniquely identifies a row in
another table. A database manager can join two tables by matching the primary
keys in one table to the foreign
keys in another. Active Record also
uses primary and foreign keys to manage relationships. Unlike
relational databases, Active Record
limits its identifiers to a single database column.
|
|