2009-08-28 5 views

Répondre

4

supposant:

post = Post.find(params[:id]) 

et modèle post contient:

has_many :comments 

vous pouvez:

comments = post.comments 
first_comment = comments.first 
+1

C'est beaucoup d'affectation de variables inutiles pour une telle tâche simple. – aehlke

+0

Juste pour illustrer le processus –

+0

Awesome perfect! – Elliot

3
Post.find(123).comments.first 

Où 123 est votre ID de poste.

+0

urgh qui semble grossier –

+0

trouver est par défaut par ID, et trouver (: d'abord) (avant votre édition) par rapport à .first est méchant –

+0

Merci, nettoyé. – aehlke

1

@ post.comments.first fonctionne normalement. (@post devrait être mis en place dans votre méthode de contrôleur)

Cependant, il est bon de réaliser que «premier» signifie d'abord dans l'association, qui est normalement ordonnée par id. Depuis l'auto-incrémentation des identifiants, il s'agit de la même chose que le "premier ajout" ou le "premier commentaire". Mais ça ne doit pas être.

Si votre association pour les commentaires a spécifié une commande différente, utilisez d'abord celle-ci, par ex. si votre association ressemblait à ceci:

has_many :comments, :order=>'rating desc' 

Ensuite (en supposant que le champ « note » est mis en place en quelque sorte d'être une valeur qui représente la note moyenne) post.comments.first vous donnera le commentaire les mieux notés, non le premier à être ajouté.

Dans ce cas, en supposant que votre modèle de commentaires a horodatages, alors vous auriez besoin de faire quelque chose comme

@post.comments.find(:first, :order=>'created_at asc') 
Questions connexes