最初に最初のこと。ビューは、コントローラーのアクションを指します。したがって、各コントローラーにいくつかのビューがあるか、何もありません。
したがって、レンダリングしたい場合 @reviews
と @logs
同じページで、まず同じアクションで両方のインスタンス変数をインスタンス化し、次に同じアクションで両方の部分をレンダリングする必要があります。どうしますか?簡単。最初にあなたはそれを示したと編集したばかりのコントローラーに着きました show
アクション。
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
2番目:あなたはあなたに行きます /app/views/reviews/show.html.erb
このようにテンプレートと両方の部分をそこに置きます(これは単なる例です。ニーズに合わせてマークアップを調整します)。
<h1> Reviews and Logs</h1>
<div id="reviews_part">
<%= render @reviews %>
</div>
<div id="logs_part">
<%= render @logs %>
</div>
次に、2つの新しい部分を作成します /app/views/reviews/_review.html.erb
と /app/views/logs/_log.html.erb
必要なすべてのマークアップをそこに置きます(通常の変数を使用します review
と log
繰り返しのオブジェクトをアドレスします)。 Railsは、必要に応じてそれらの部分を何度も繰り返します。
または、部分的なレンダリングを明示的に呼び出すことができます
<div id="reviews_part">
<% @reviews.each do |review| %>
<%= render review %>
which is the same as
<%= render partial:"reviews/review", locals:{review:review} %>
<% end %>
</div>