2016-07-22 54 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> 

我希望它會幫助你,如果你有任何問題,請讓我知道。

相關問題