Tout d'abord. Les vues se réfèrent aux actions dans les contrôleurs. Il peut donc y avoir plusieurs vues pour chaque contrôleur ou même aucune.
Donc, si vous voulez rendre @reviews
et @logs
Sur la même page, vous devez d'abord instancier les deux variables d'instance dans la même action, puis rendre les deux partiels dans la même action. Comment tu fais ça? Facile. Vous êtes d'abord arrivé au contrôleur que vous venez de montrer et de le modifier show
action.
def show
# You can set the variable in the if-clause
# And you also need to use static finders with a hash as an argument in Rails4
if (@user = User.find_by(name: params[:id]))
@reviews = @user.reviews.all
@logs = @user.logs.all
# You don't need to call render explicitly
# if you render the view with the same name as the action
else
render file: 'public/404', status: 404, formats: [html]
end
end
Deuxièmement: vous allez à votre /app/views/reviews/show.html.erb
modèle et y mettre les deux partiels comme celui-ci (ce n'est qu'un exemple, ajustez votre balisage pour répondre à vos besoins).
<h1> Reviews and Logs</h1>
<div id="reviews_part">
<%= render @reviews %>
</div>
<div id="logs_part">
<%= render @logs %>
</div>
Créez maintenant 2 nouveaux partiels /app/views/reviews/_review.html.erb
et /app/views/logs/_log.html.erb
et mettez tout le balisage nécessaire là-bas (utilisez des variables régulières review
et log
pour additionner les objets répétitifs). Les rails répéteront automatiquement ces partiels autant de fois que nécessaire.
Ou vous pouvez explicitement appeler le rendu partiel
<div id="reviews_part">
<% @reviews.each do |review| %>
<%= render review %>
which is the same as
<%= render partial:"reviews/review", locals:{review:review} %>
<% end %>
</div>