2010-10-23 26 views
1

J'ai une application Rails simple qui a deux modèles principaux. Un modèle de personne et un modèle de cadeau. Les cadeaux appartiennent aux gens, et les gens ont beaucoup de cadeaux.Ajouter un nombre d'enregistrements dans la relation belongs_to dans l'application Rail?

Je suis actuellement (dans la vue des individus d'index) répertoriant toutes les personnes dans la base de données avec le code suivant:

<% for person in @people %> 
<li><%= link_to h(person.name), person %></li> 
<% end %> 

Ce que je voudrais faire est que le nombre de cadeaux associés à une personne à côté à leur nom entre parenthèses. Exemple:

Danny McC (10) 

Y a-t-il une manière intégrée de le faire? Tels que:

<%= @person.name.count => 

Est-ce possible?

Merci,

Danny

Répondre

1

Si vous modèle personne a has_many :gifts, en vous modèle ajouter aussi:

de name_and_gifts_count 
    name_and_gifts_count = name 
    name_and_gifts_count += '(' 
    name_and_gifts_count += gifts.count.to_s 
    name_and_gifts_count += ')' 
    return name_and_gifts_count 
end 

puis dans votre lien, utilisez:

<%= link_to h(person.name_and_gifts_count), person %> 
+0

Très bien, cela a fonctionné parfaitement. Merci! – dannymcc

+3

Vous pouvez le rendre beaucoup plus court. Cela semble assez moche IMO ... 'return" # {name} (# {gifts.count}) "' – Mischa

+0

@captaintokyo - dans le modèle de la personne à nouveau, ou dans la vue? – dannymcc

4

Don J'accepte ma réponse, parce que je ne veux pas voler les points de Yannis, mais sa méthode peut être réécrite comme ceci:

def name_and_gifts_count 
    return "#{name} (#{gifts.count})" 
end 

En fait, je partirais à return aussi. La dernière instruction est automatiquement renvoyée dans Ruby.

def name_and_gifts_count 
    "#{name} (#{gifts.count})" 
end 
+0

C'est beaucoup plus ordonné, gentil - merci! – dannymcc