2010-11-09 4 views
0

Je ne suis pas sûr de ce que je fais mal ici. Je trouve de nombreux exemples qui montrent que je fais bien les choses et que ce sont des choses vraiment basiques, je sais. Je suis tout simplement un peu en retard, mais j'ai deux modèles, 'Post' et 'Category'. J'essaie d'obtenir la liste des catégories de la base de données et les liste par nom.Comment parcourir plusieurs résultats de modèle dans Rails 3?

class Post < ActiveRecord::Base 
    has_and_belongs_to_many :categories 
end 

class Category < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
end 

# get all categories and output the names 
cats = Category.all 
cats.each do |cat| 
    cat.name 
end 

Il semble à la place produire la totalité du tableau de résultats récupérés. Tous les résultats ne sont même pas ceux que je suis en train de répéter. Ce qui donne?

+0

Quelle sortie attendez-vous? –

Répondre

1

Où mettez-vous ce code de boucle .each? Où est le code de "sortie" auquel vous faites référence? Si vous utilisez une boucle dans une vue, assurez-vous que vous utilisez

<% %> 

et non

<%= %> 

pour les lignes de boucle elles-mêmes. Comme dans:

<% Category.all.each do |cat| %> 
    <%= cat.name %> 
<% end %> 
0

Category.all retourne un tableau de tous les objets de catégorie, ce qui correspond à tout ce que contient la table de catégories. les chats est donc un tableau de toutes les catégories. Je ne suis pas sûr de savoir pourquoi vous pensez que vous êtes seulement en train d'itéter sur "un" de n'importe quoi. Pour obtenir un résultat, vous pouvez utiliser find() ou first:

cat = Category.first 
puts cat.name 

Si vous voulez que tous les noms, vous pouvez le faire:

Category.all.map(&:name) 

ou, un peu plus efficace, surtout s'il y a beaucoup champs:

Category.all(:select => :name).map(&:name) 
Questions connexes