Das wichtigste zuerst. Ansichten beziehen sich auf Aktionen in Controllern. Es kann also mehrere Ansichten für jeden Controller oder sogar für keine geben.
Also, wenn Sie rendern wollen @reviews
und @logs
Auf derselben Seite sollten Sie zuerst beide Instanzvariablen in derselben Aktion instanziieren und anschließend beide Teilungen in derselben Aktion rendern. Wie machst du das? Einfach. Zuerst sind Sie zu dem Controller gekommen, den Sie gerade gezeigt und bearbeitet haben show
Aktion.
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
Zweitens: Du gehst zu dir /app/views/reviews/show.html.erb
Vorlage und legen Sie beide Teilungen dort wie dieses ein (dies ist nur ein Beispiel, passen Sie Ihr Markup an Ihre Bedürfnisse an).
<h1> Reviews and Logs</h1>
<div id="reviews_part">
<%= render @reviews %>
</div>
<div id="logs_part">
<%= render @logs %>
</div>
Erstellen Sie nun 2 neue Partials /app/views/reviews/_review.html.erb
und /app/views/logs/_log.html.erb
und geben Sie dort alle erforderlichen Markups ein (verwenden Sie reguläre Variablen review
und log
um die sich wiederholenden Objekte anzuschließen). Rails wiederholt diese Teilungen nach Bedarf automatisch.
Oder Sie können das Teilrender explizit nennen
<div id="reviews_part">
<% @reviews.each do |review| %>
<%= render review %>
which is the same as
<%= render partial:"reviews/review", locals:{review:review} %>
<% end %>
</div>