Hi,
I am trying to perform a query with ActiveRecord that I want to put into
a Rails application later. For now I just wrote it within a plain old
Ruby script for easier testing.
I am working with an existing database so I had to map some foreign keys
myself. As you can see from the models below, the database has a
structure of
Prospectlists <=habtm=> Contacts <=habtm=> Accounts
I want to produce a list of all contacts belonging on a certain prospect
list with their account name.
If I have find one specific contact (ll.28-32), the company name prints.
But if I do the exact same for a number of contacts already selected
from the mailing list (ll.36-41), no company names are printed. No error
is produced.
What am I doing wrong?
1 # set up the structures
2 class Prospect_list < ActiveRecord::Base
3 has_and_belongs_to_many :contacts,
4 :join_table => "prospect_lists_prospects",
5 :foreign_key => "prospect_list_id",
6 :association_foreign_key => "related_id"
7 end
8
9 class Account < ActiveRecord::Base
10 has_and_belongs_to_many :contacts,
11 :join_table => "accounts_contacts",
12 :foreign_key => "account_id",
13 :association_foreign_key => "contact_id"
14 end
15
16
17 class Contact < ActiveRecord::Base
18 has_and_belongs_to_many :prospect_lists,
19 :join_table => "prospect_lists_prospects",
20 :foreign_key => "related_id",
21 :association_foreign_key => "prospect_list_id"
22 has_and_belongs_to_many :accounts,
23 :join_table => "accounts_contacts",
24 :foreign_key => "contact_id",
25 :association_foreign_key => "account_id"
26 end
27
28 me = Contact.find_by_first_name("Siros")
29 print me.last_name
30 me.accounts.each do |company|
31 puts company.name
32 end
33 # => "JohnsonIBM"
34
35
36 mailing = Prospect_list.find_by_name("Hot Leads")
37 mailing.contacts.each do |person|
38 puts person.first_name + ' ' + person.last_name
39 # line below prints nothing
40 person.accounts.first {|company| puts company.name }
41 end
42 # => "Johnson\nFerret\nMüller\n" etc.