Programming Tutorials

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

By: David Heinemeier Hansson in Ruby Tutorials on 2009-03-03  

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

Add Comment

* Required information


No comments yet. Be the first!

Most Viewed Articles (in Ruby )

Latest Articles (in Ruby)