如何使用来自不同控制器的变量的相同部分?

时间:2017-03-15 08:59:44

标签: ruby-on-rails

在我的应用程序中,用户以品牌提交评论。这是关联:

class Brand < ActiveRecord::Base
has_many :reviews

class Review < ActiveRecord::Base
belongs_to :brand

现在我有一个部分定义来显示评论:

_showreview.html.erb

<% review.each do |review| %>
<div class="col-sm-4">
<div class="thumbnail">
<%= image_tag review.first_photo %>
<div class="caption">
<h4><%= link_to review.title, review %></h4>
<h6><strong><%= link_to ("WRITTEN BY " + review.user.username.upcase), review.user %></strong></h6>
<%= review.description.truncate_words(60, omission: '...') %>
<br>    
<br>
<%= link_to review.brand.label, review.brand, :class => 'btn btn-sm btn-lake' %>
</div>
</div>
</div>

我通过在:

中传递一个实例变量来渲染它
<%= render "showreview", review: @top_reviews %>

它按预期工作。

现在我希望重复使用partial for brands / show.html.erb

我现在要做的是检索属于某品牌的所有评论并进行展示。

show_controller.rb看起来像这样

 def show
  @brand = Brand.find(params[:id])
 @reviews =Review.find(params[:id])
 end

我尝试使用它,但它不起作用。这样做的正确方法是什么?

<%= render "/reviews/showreview", review: '@brand.reviews' %>

3 个答案:

答案 0 :(得分:2)

<%= render "/reviews/showreview", review: @brand.reviews %>

但请将review重命名为reviews。这个变量的名称更方便。

答案 1 :(得分:0)

你的方法将是这样的

/**

并在您的视图中

def show
  @brand = Brand.find(params[:id])
end

答案 2 :(得分:0)

首先,您应该使用多个来进行变量检查。

 <%= render "reviews/showreview", review: @brand.reviews %>

它使您的代码可读性。 然后尝试放置评论:&#39; @ branch.review&#39;按reviews.each do |review| 并确保你从控制器传递变量@branch