Primeiras coisas primeiro.As visualizações referem-se a ações nos controladores.Portanto, pode haver várias visualizações para cada controlador ou até mesmo nenhuma.
Então, se você quiser renderizar @reviews
e @logs
na mesma página você deve primeiro instanciar ambas as variáveis de instância na mesma ação e depois renderizar ambas as parciais na mesma ação.Como você faz isso?Fácil.Primeiro você chegou ao controlador que acabou de mostrar e editou-o show
Ação.
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
Segundo:você vai para o seu /app/views/reviews/show.html.erb
modelo e coloque os dois parciais assim (este é apenas um exemplo, ajuste sua marcação para atender às suas necessidades).
<h1> Reviews and Logs</h1>
<div id="reviews_part">
<%= render @reviews %>
</div>
<div id="logs_part">
<%= render @logs %>
</div>
Agora crie 2 novas parciais /app/views/reviews/_review.html.erb
e /app/views/logs/_log.html.erb
e coloque toda a marcação necessária lá (use variáveis regulares review
e log
para abordar os objetos repetidos).O Rails repetirá automaticamente essas parciais quantas vezes forem necessárias.
Ou você pode chamar explicitamente a renderização parcial
<div id="reviews_part">
<% @reviews.each do |review| %>
<%= render review %>
which is the same as
<%= render partial:"reviews/review", locals:{review:review} %>
<% end %>
</div>