Created
May 13, 2009 14:16
Revisions
-
kastner revised this gist
May 13, 2009 . 1 changed file with 58 additions and 54 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,67 +1,71 @@ #!/usr/bin/env ruby %w|rubygems active_record irb|.each {|lib| require lib} ActiveSupport::Inflector.inflections.singular("toyota", "toyota") ActiveRecord::Base.logger = Logger.new(STDOUT) ActiveRecord::Base.establish_connection( :adapter => "sqlite3", :database => ":memory:" ) ActiveRecord::Schema.define do create_table :cars do |t| t.string :name end create_table :car_to_wheel_table_map, :id => false do |t| t.integer :car_id t.string :wheel_table end create_table :wheels_for_fords do |t| t.integer :car_id t.string :color end create_table :wheels_for_toyotas do |t| t.integer :car_id t.string :color end end class Wheel < ActiveRecord::Base set_table_name nil belongs_to :car end class CarWheelMap < ActiveRecord::Base set_table_name "car_to_wheel_table_map" belongs_to :car end class Car < ActiveRecord::Base has_one :car_wheel_map delegate :wheel_table, :to => :car_wheel_map def wheels @wheels ||= begin the_klass = "#{wheel_table.classify}Wheel" eval <<-END class #{the_klass} < ActiveRecord::Base set_table_name "wheels_for_#{wheel_table.pluralize}" belongs_to :car end END self.class.send(:has_many, "#{wheel_table}_wheels") send "#{wheel_table}_wheels" end end end rav4 = Car.create(:name => "Rav4") rav4.create_car_wheel_map(:wheel_table => "toyota") fiesta = Car.create(:name => "Fiesta") fiesta.create_car_wheel_map(:wheel_table => "ford") rav4.wheels.create(:color => "red") fiesta.wheels.create(:color => "green") # IRB.start if __FILE__ == $0 -
kastner renamed this gist
May 13, 2009 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
kastner created this gist
May 13, 2009 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,67 @@ #!/usr/bin/env ruby %w|rubygems active_record irb|.each {|lib| require lib} ActiveSupport::Inflector.inflections.singular("toyota", "toyota") CAR_TYPES = %w|ford buick toyota| ActiveRecord::Base.logger = Logger.new(STDOUT) ActiveRecord::Base.establish_connection( :adapter => "sqlite3", :database => ":memory:" ) ActiveRecord::Schema.define do create_table :cars do |t| t.string :name end create_table :car_to_wheel_table_map, :id => false do |t| t.integer :car_id t.string :wheel_table end CAR_TYPES.each do |car_type| create_table "wheels_for_#{car_type.pluralize}" do |t| t.integer :car_id t.string :color end end end CAR_TYPES.each do |car_type| eval <<-END class #{car_type.classify}Wheel < ActiveRecord::Base set_table_name "wheels_for_#{car_type.pluralize}" belongs_to :car end END end class Car < ActiveRecord::Base has_one :car_wheel_map CAR_TYPES.each do |car_type| has_many "#{car_type}_wheels" end delegate :wheel_table, :to => :car_wheel_map def wheels send("#{wheel_table}_wheels") end end class CarWheelMap < ActiveRecord::Base set_table_name "car_to_wheel_table_map" belongs_to :car end rav4 = Car.create(:name => "Rav4") rav4.create_car_wheel_map(:wheel_table => "toyota") rav4.wheels.create(:color => "red") fiesta = Car.create(:name => "Fiesta") fiesta.create_car_wheel_map(:wheel_table => "ford") fiesta.wheels.create(:color => "green") IRB.start if __FILE__ == $0