Using the collect method to collect to a 2 dimensional array

Hi    I am trying to collect name and email of a person to an array (Or hash?) like [[name1,emailid],[name2,emailid].......] But I dont know how to do that. I tried like

email_array = Contact.get_email_id_and_name_of_contacts(problem.reported_by_id) unless problem.reported_by_id.blank?

And in Contact class

def self.get_email_ids_of_contacts(contact_id)   return Contact.find_by_id(contact_id).name, Contact.find_by_id(contact_id).contact_email_addresses.find(:all, :conditions => ['contact_email_address_type_id=?',2]).collect { |mail| mail.email} end

      Here I tried to return two value at a time .But not suceeded .How can I do that?Please help

Sijo

Hi   I am trying to collect name and email of a person to an array (Or hash?) like [[name1,emailid],[name2,emailid].......] But I dont know how to do
that. I tried like

email_array = Contact.get_email_id_and_name_of_contacts(problem.reported_by_id)
unless problem.reported_by_id.blank?

And in Contact class

def self.get_email_ids_of_contacts(contact_id) return Contact.find_by_id(contact_id).name, Contact.find_by_id(contact_id).contact_email_addresses.find(:all, :conditions => ['contact_email_address_type_id=?',2]).collect { |mail| mail.email} end

Collect just bungs whatever your block evaluates to in an array. If
that block evaluates to an array then you'll get an array of arrays
back.

Fred

Sijo,

not sure, but looking at your code it seems you may want to do something like the following

def self.get_email_ids_of_contacts(contact_id)   contact = Contact.find_by_id(contact_id)

  contact.contact_email_addresses.find(:all, :conditions => ).map do

mail>

    [contact.name, mail.email]   end end

Sijo Kg wrote:

Hi     Lots of thanks for your great reply.This is what i needed.Now it works. But I have one more problem. I have to find group managers name and email like above and I tried like below name_and_email_managers=Group.get_managers_name_and_emails(problem.primary_assignee_group_id) unless problem.primary_assignee_group_id.blank?

And now in Group class def self.get_managers_name_and_emails(grp_id)     managers=Group.find_by_id(grp_id).contacts.find(:all,:conditions => ['group_user_type_id = ?',4])     managers.each do |manager|       manager.contact_email_addresses.find(:all, :conditions => ['contact_email_address_type_id=?',2]).map do |mail|         [manager.name,mail.email]       end     end end         But this does not give array like above?Could you please tell me where is the fault?A group may have more than one manager and each manager has more than one email addresses of the above type.That is why I wrote code like above Groups and Contacts are connected through user groups (has_many :through relation)

Sijo

And now in Group class def self.get_managers_name_and_emails(grp_id) managers=Group.find_by_id(grp_id).contacts.find(:all,:conditions => ['group_user_type_id = ?',4]) managers.each do |manager| manager.contact_email_addresses.find(:all, :conditions => ['contact_email_address_type_id=?',2]).map do |mail| [manager.name,mail.email] end end end But this does not give array like above?Could you please tell me where is the fault?A group may have more than one manager and each manager has more than one email addresses of the above type.That is why I wrote code like above Groups and Contacts are connected through user groups (has_many :through relation)

You're generating these arrays using map but then you're just throwing them away (each returns the collection it iterated over. Perhaps you mean that to be map or inject instead to concatenate the various arrays produced?

Fred

Frederick Cheung wrote: