123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #---
- # Excerpted from "Agile Web Development with Rails",
- # published by The Pragmatic Bookshelf.
- # Copyrights apply to this code. It may not be used to create training material,
- # courses, books, articles, and the like. Contact us if you are in doubt.
- # We make no guarantees that this code is fit for any purpose.
- # Visit http://www.pragmaticprogrammer.com/titles/rails4 for more book information.
- #---
- $: << File.dirname(__FILE__)
- require "connect"
- require "logger"
- ActiveRecord::Base.logger = Logger.new(STDERR)
- ActiveRecord::Schema.define do
- create_table :people, :force => true do |t|
- t.string :type
- # common attributes
- t.string :name
- t.string :email
- # attributes for type=Customer
- t.decimal :balance, :precision => 10, :scale => 2
- # attributes for type=Employee
- t.integer :reports_to
- t.integer :dept
- # attributes for type=Manager
- # -- none --
- end
-
- end
- class Person < ActiveRecord::Base
- end
- class Customer < Person
- end
- class Employee < Person
- belongs_to :boss, :class_name => "Manager", :foreign_key => :reports_to
- end
- class Manager < Employee
- end
- Customer.create(:name => 'John Doe', :email => "john@doe.com",
- :balance => 78.29)
-
- wilma = Manager.create(:name => 'Wilma Flint', :email => "wilma@here.com",
- :dept => 23)
-
- Customer.create(:name => 'Bert Public', :email => "b@public.net",
- :balance => 12.45)
-
- barney = Employee.new(:name => 'Barney Rub', :email => "barney@here.com",
- :dept => 23)
- barney.boss = wilma
- barney.save!
- manager = Person.find_by_name("Wilma Flint")
- puts manager.class #=> Manager
- puts manager.email #=> wilma@here.com
- puts manager.dept #=> 23
- customer = Person.find_by_name("Bert Public")
- puts customer.class #=> Customer
- puts customer.email #=> b@public.net
- puts customer.balance #=> 12.45
- b = Person.find_by_name("Barney Rub")
- p b.boss
|