diff options
Diffstat (limited to 'activerecord/examples/associations.rb')
-rw-r--r-- | activerecord/examples/associations.rb | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/activerecord/examples/associations.rb b/activerecord/examples/associations.rb deleted file mode 100644 index b0df367321..0000000000 --- a/activerecord/examples/associations.rb +++ /dev/null @@ -1,87 +0,0 @@ -require File.dirname(__FILE__) + '/shared_setup' - -logger = Logger.new(STDOUT) - -# Database setup --------------- - -logger.info "\nCreate tables" - -[ "DROP TABLE companies", "DROP TABLE people", "DROP TABLE people_companies", - "CREATE TABLE companies (id int(11) auto_increment, client_of int(11), name varchar(255), type varchar(100), PRIMARY KEY (id))", - "CREATE TABLE people (id int(11) auto_increment, name varchar(100), PRIMARY KEY (id))", - "CREATE TABLE people_companies (person_id int(11), company_id int(11), PRIMARY KEY (person_id, company_id))", -].each { |statement| - # Tables doesn't necessarily already exist - begin; ActiveRecord::Base.connection.execute(statement); rescue ActiveRecord::StatementInvalid; end -} - - -# Class setup --------------- - -class Company < ActiveRecord::Base - has_and_belongs_to_many :people, :class_name => "Person", :join_table => "people_companies", :table_name => "people" -end - -class Firm < Company - has_many :clients, :foreign_key => "client_of" - - def people_with_all_clients - clients.inject([]) { |people, client| people + client.people } - end -end - -class Client < Company - belongs_to :firm, :foreign_key => "client_of" -end - -class Person < ActiveRecord::Base - has_and_belongs_to_many :companies, :join_table => "people_companies" - def self.table_name() "people" end -end - - -# Usage --------------- - -logger.info "\nCreate fixtures" - -Firm.new("name" => "Next Angle").save -Client.new("name" => "37signals", "client_of" => 1).save -Person.new("name" => "David").save - - -logger.info "\nUsing Finders" - -next_angle = Company.find(1) -next_angle = Firm.find(1) -next_angle = Company.find_first "name = 'Next Angle'" -next_angle = Firm.find_by_sql("SELECT * FROM companies WHERE id = 1").first - -Firm === next_angle - - -logger.info "\nUsing has_many association" - -next_angle.has_clients? -next_angle.clients_count -all_clients = next_angle.clients - -thirty_seven_signals = next_angle.find_in_clients(2) - - -logger.info "\nUsing belongs_to association" - -thirty_seven_signals.has_firm? -thirty_seven_signals.firm?(next_angle) - - -logger.info "\nUsing has_and_belongs_to_many association" - -david = Person.find(1) -david.add_companies(thirty_seven_signals, next_angle) -david.companies.include?(next_angle) -david.companies_count == 2 - -david.remove_companies(next_angle) -david.companies_count == 1 - -thirty_seven_signals.people.include?(david)
\ No newline at end of file |