首先。视图参考控制器中的操作。因此,每个控制器甚至没有几个视图。
所以,如果你想渲染 @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
第二:你去你的 /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
向重复对象进行调整)。铁轨将根据需要自动重复这些部分。
或者您可以明确调用部分渲染
<div id="reviews_part">
<% @reviews.each do |review| %>
<%= render review %>
which is the same as
<%= render partial:"reviews/review", locals:{review:review} %>
<% end %>
</div>