2016-07-22 56 views
0

在我的轨道类节目控制器类我把它设置这样Rails的检索中显示控制器的所有记录

def show 
    @categories = Category.find_by(params[:name]) 
    end 

但是,当我访问该控制器将返回该类别中发现的单,而不是产品的所有记录类别。

这里是我的视图控制器的代码

<div class="grid"> 
    <% @categories.products.each do |product| %> 

    <%= link_to product_path(id: product.slug, category_name: product.category.name), class: "card" do %> 
<div class="product-image"> 
<%= image_tag product.productpic.url if product.productpic? %> 
    </div> 

     <div class="product-text"> 
     <h2 class="product-title"> <%= product.name %></h2> 
      <h3 class="product-price">£<%= product.price %></h3> 
     </div> 

     <% end %> 
    <% end %> 
</div> 

我到底做错了什么?

+0

你已经解释了正在发生的事情,但是假设发生了什么? –

+0

#find_by应该只返回一条记录,所以它应该是@category。无论如何,什么是@categories? – siopao

+0

你能展示你的关系声明吗?我不认为这个问题是在控制器.. – rneves

回答

0

首先,出于安全考虑,您决不应该相信params哈希来检索记录。如果使用散列作为参数,Rails将“使数据安全”。使用下面的代码:

def show 
    @category = Category.find_by(name: params[:name]) 
end 

其次,通常在节目页面上,你只需要检索一个记录,因此变量应该被命名为单数。我纠正了上述情况。

第三,如果在发布示例时使用适当的缩进,它会有所帮助。它使我们更容易帮助你。

四,线下(我改变@categories@category)基本上是说:“现在,我有这个分类,找它在products表相关联的所有的产品,把它们放进|product|迭代”

<% @category.products.each do |product| %> 

可变我不知道你想要的类别做什么,但如果你保留此行的代码,它总是会告诉你所有的产品。也许你只是想显示最近3,在这种情况下,你可以做这样的事情:

在你的控制器:

def show 
    @category = Category.find_by(name: params[:name]) 
    @recent_products = @category.products.order(created_at: :desc).limit(3) 
end 

在你看来:

<div class="grid"> 
    <% @recent_products.each do |product| %> 
    <%= link_to product_path(id: product.slug, category_name: product.category.name), class: "card" do %> 
     <div class="product-image"> 
     <%= image_tag product.productpic.url if product.productpic? %> 
     </div> 
     <div class="product-text"> 
     <h2 class="product-title"> <%= product.name %></h2> 
     <h3 class="product-price">£<%= product.price %></h3> 
     </div> 
    <% end %> 
    <% end %> 
</div> 
+0

与几个修改这工作正常 –

0

你可以做这样 在你的控制器,你可以这样写代码

def show 
@category = Category.find_by_name(params[:name]) 
end 

,并在六它会工作

<div class="grid"> 
    <% @category.products.each do |product|%> 
    // place your code what you want to display 
    <% end %> 
</div> 

我希望它会帮助你,如果你有任何问题,请让我知道。

相关问题