Je suis Ruby on Rails débutant et avait une question sur la logique de vue en cas d'objets associés:Affichage des objets associés
Mes modèles se ressemblent à
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
end
Et ce que je veux afficher est quelque chose comme une liste de tous les messages et les trois premiers commentaires pour chacun.
Alors, je gardais l'indice contoller action simple
class PostController < ApplicationController
#..
def index
@posts = Post.find(:all)
end
#..
end
Maintenant, dans le views/posts/index.html.erb
que je peux faire quelque chose comme ça @posts.comments
que je peux boucle pour les trois premières entrées. Mais Comment puis-je accéder à la fonctionnalité qui est normalement effectuée dans le modèle (dans ce cas, le modèle associé), comme la commande, la portée, etc. dans la vue (ou le contrôleur)?
Je voudrais apporter quelques petites modifications à votre exemple: 1) Vous n'avez pas besoin du proc sur la portée nommée. Faites juste named_scope: recent: limit => 3,: order ... 2) Dans la vue j'utiliserais un partiel: <% = render: partial "comment",: collection => @ post.comments.recent% > Rails enverra le tableau retourné par le named_scope et rendra le partiel dans une boucle pour vous. – scottd
Merci ScottD! J'ai mis à jour l'exemple. –
Merci Weppos et ScottD. Ça fonctionne parfaitement. Juste une clarification de débutant nécessaire. Dans le code ci-dessus, lorsque PostContoller charge @posts et que view/partail s'exécute @ post.comments.recent, à quel moment les appels sql sont-ils déclenchés? Y a-t-il un moyen de voir cela (traces, etc.)? – mataal