2016-07-22 10 views
0

カテゴリショーのコントローラをすべてのレコードを取得するのRailsしかし、私はこのコントローラを訪れたときではなく、単一のカテゴリで見つかった製品のすべてのレコードを返します。カテゴリー。ここでショーコントローラで、私はそれをこの</p> <pre><code>def show @categories = Category.find_by(params[:name]) end </code></pre> <p>のようなセットアップを持っているカテゴリのための私のレールで

は、カテゴリ

<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は1つのレコードしか返さないので、@categoryにする必要があります。いずれにせよ、@categoriesは何ですか? – siopao

+0

関係宣言を表示できますか?私は問題がコントローラ内にあるとは思わない。 – rneves

答えて

0

まず、セキュリティ上の理由から、レコードを取得するためにparamsハッシュを信頼する必要はありません。あなたの引数としてハッシュを使うなら、Railsは "データを安全にする"でしょう。次のコードを使用してください:

第2に、通常は表示ページで、1つのレコードのみを取得したいので、変数の名前を単数形にする必要があります。私は上記を訂正しました。

第3に、例を投稿するときに適切なインデントを使用すると役立ちます。それは私たちがあなたを助けることをより簡単にします。

第四に、以下の行(私は@category@categoriesを変更)基本的に言っている:「今、私はこの単一カテゴリを持っていることを、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 

をこのコードを書いて、あなたのViにすることができ、あなたのコントローラでこのよう EWそれは

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

私はそれはあなたを助けるでしょう希望とまだあなたが任意の懸念を持っているなら、私に知らせてください動作します。

関連する問題

 関連する問題