2010-09-16 5 views
0

C'est une méthode qui permet d'être dans le contrôleur et je pense qu'il est plus logique de faire une méthode pour le modèle de contact:Comment ajouter correctement ce modèle à une méthode?

def colleagues 

    company = Company.find(self.company_id) 

    contacts = company.contacts.collect(&:full_name) 

    contacts.each do |contact| 
     colleagues = contacts.reject{ |c| c==contact } 
    end 

    return colleagues 

    end 

Chaque contact appartient à une société. Chaque entreprise peut avoir plusieurs autres contacts. Les collègues d'un contact spécifique sont les autres membres de la Société auxquels appartient le contact spécifié.

Je semble obtenir une erreur, une pile à une erreur profonde.

+0

changer votre titre « Comment est-ce que j'ajoute correctement cette méthode à un modèle? " :) – stephenmurdoch

+0

ouais, merci j'ai espacé ... écrire si vite. – Angela

Répondre

2

Est-ce ce que vous cherchez?

class Contact 
    belongs_to :company 

    def colleagues 
    self.company.contacts 
    end 
end 

Si vous ne voulez pas vous inclus dans la liste des contacts, vous pouvez utiliser reject:

class Contact 
    belongs_to :company 

    def colleagues 
    self.company.contacts.reject { |contact| contact == self } 
    end 
end 

mise à jour pour votre dernier commentaire:

def colleagues 
    self.company.contacts.collect { |contact| contact.full_name }.to_sentence 
end 

Ou encore , si vous ne voulez pas vous inclure:

def colleagues 
    colleagues = self.company.contacts.reject { |contact| contact == self } 
    colleagues.collect { |contact| contact.full_name }.to_sentence 
end 
+0

Comment puis-je faire en sorte que mes collègues se comportent comme si c'était une question? L'utilisation serait de substituer des collègues afin qu'il sorte comme "Contact1, contact2, et Contact3" – Angela

+0

oh, et j'affiche le .full_name pour chaque contact qui est un membre des collègues .... – Angela

0

Essayez ceci:

class Contact 
    belongs_to :company 
    has_many :colleagues, :through => :company, :source => :contacts, 
         :conditions => 'contacts.id != #{id}' 
end 


class Company 
    has_many :contacts 
end 

Maintenant, vous pouvez faire des appels suivants:

contact.colleagues        # colleagues list 
contact.colleagues.map(&:full_name).to_sentence # colleague names string 

Vous pouvez optimiser le résultat comme suit:

contact.colleagues.all(:select => :full_name).map(&:full_name).to_sentence 
+0

C'est gentil! Malheureusement en sortie, elle veut une chaîne pas une collection de contacts ... Y at-il un moyen d'utiliser has_many: à travers et retourner une chaîne? – Mischa

+0

J'ai mis à jour la réponse. Regarde. –

Questions connexes