Cominciando dall'inizio. Visualizzazioni si riferiscono alle azioni nei controller. Quindi ci possono essere diverse viste per ciascun controller o anche nessuna.
Quindi, se vuoi rendere @reviews
e @logs
Nella stessa pagina è necessario prima istanziare entrambe le variabili di istanza nella stessa azione e quindi rendere entrambe le parziali nella stessa azione. Come si fa a farlo? Facile. Per prima cosa sei arrivato al controller che hai appena mostrato e modificarlo show
azione.
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
Secondo: vai al tuo /app/views/reviews/show.html.erb
Modello e metti entrambi i parziali lì in questo modo (questo è solo un esempio, regola il markup per soddisfare le tue esigenze).
<h1> Reviews and Logs</h1>
<div id="reviews_part">
<%= render @reviews %>
</div>
<div id="logs_part">
<%= render @logs %>
</div>
Ora crea 2 nuovi parziali /app/views/reviews/_review.html.erb
e /app/views/logs/_log.html.erb
e metti lì tutto il markup necessario (usa variabili regolari review
e log
Per risolvere gli oggetti ripetuti). I binari ripeteranno automaticamente quei parziali quante sono necessarie.
Oppure puoi chiamare esplicitamente il rendering parziale
<div id="reviews_part">
<% @reviews.each do |review| %>
<%= render review %>
which is the same as
<%= render partial:"reviews/review", locals:{review:review} %>
<% end %>
</div>