2009-07-31 7 views
5

J'ai un utilisateur qui possède de nombreux téléphones
J'ai aa téléphone qui a beaucoup de résumés d'appels
donc mon utilisateur a beaucoup de résumés d'appelsrubis sur des rails de méthode non définie pour le tableau

maintenant au code que j'ai: Je voudrais générer un rapport qui montre tous les résumés d'appels pour les téléphones qui appartiennent à cet utilisateur. Je vais dans le contrôleur, et voici mon code là:

def index 
    @phones = Phone.find(:all, :conditions => ["user_id = ?", @current_user.id]) 
    @call_summaries = @phones.call_summaries.find(:all) 
end 

Mais ce EXPEDITEUR cette erreur:

undefined method `call_summaries' for #Array:0x476d2d0

Toute aide serait très apprécié.

Répondre

5

Si vous avez la has_many: par rapport mis en place, vous devriez juste être capable de faire:

@call_summaries = @current_user.call_summaries 

Le problème avec votre méthode est que vous appelez call_summaries sur la @phones, plutôt que sur des instances de téléphone individuelles.

+0

Ah cela a fonctionné, merci. Juste une chose de plus, j'ai mis en place une clé étrangère dans call_summaries parce que les noms de colonnes sont différents. Et je ne cherche pas la colonne phones.id non plus. Je suis à la recherche d'une clé hexadécimale générée. Ceci est le SQL qui est générée à partir de la commande correcte avec une clé étrangère. SELECT * FROM call_summaries call_summaries INNER JOIN téléphones sur call_summaries.reported_by = phones.id OÙ phones.user_id = 1 Il devrait être phones.hex_key au lieu de phones.id. Comment puis-je changer cela, j'ai essayé les clés étrangères mais à moins que je fasse quelque chose de stupide, ça n'a pas marché. Merci encore! – Ryan

+0

Il semble que vous deviez utiliser les options: foreign_key et: primary_key aux deux extrémités de l'association. Dans CallSummary, par exemple, essayez 'belongs_to: phone,: foreign_key =>: reported_by,: primary_key =>: hex_key' (et faites la même chose pour l'association has_many dans Phone). –

2

@phones est un tableau de Phone objets. Vous devez parcourir ce tableau et ajouter les résumés d'appels de chaque téléphone à un seul tableau. Essayez ceci:

@phones = Phone.find(:all, :conditions => ["user_id = ?", @current_user.id]) 
@call_summaries = @phones.inject([]){|arr, phone| arr + phone.call_summaries} 
1

Hors sujet et être juste moi pointilleux, mais un viseur dynamique est plus lisible:

@phones = Phone.find_all_by_user_id(@current_user) 
+0

devrait être '@phones = Phone.find_all_by_user_id (@ current_user.id)' – brittohalloran

Questions connexes