Defining tables and classes (using MySQL) in Ruby on Rails

By: David Heinemeier Hansson  

Data definitions are specified only in the database. Active Record queries the database for the column names (that then serves to determine which attributes are valid) on regular object instantiation through the new constructor and relies on the column names in the rows with the finders.

   # CREATE TABLE companies (
   #   id int(11) unsigned NOT NULL auto_increment,
   #   client_of int(11),
   #   name varchar(255),
   #   type varchar(100),
   #   PRIMARY KEY  (id)
   # )

Active Record automatically links the "Company" object to the "companies" table

   class Company < ActiveRecord::Base
     has_many :people, :class_name => "Person"

   class Firm < Company
     has_many :clients

     def people_with_all_clients
      clients.inject([]) { |people, client| people + client.people }

The foreign_key is only necessary because we didn‘t use "firm_id" in the data definition

   class Client < Company
     belongs_to :firm, :foreign_key => "client_of"

   # CREATE TABLE people (
   #   id int(11) unsigned NOT NULL auto_increment,
   #   name text,
   #   company_id text,
   #   PRIMARY KEY  (id)
   # )

Active Record will also automatically link the "Person" object to the "people" table

   class Person < ActiveRecord::Base
     belongs_to :company

Archived Comments

Most Viewed Articles (in Ruby )

Latest Articles (in Ruby)

Comment on this tutorial