0

RoR初心者です。

問題は、Ancesrty を使用して完全に機能する製品分類を作成したことです。しかし今、これらのサブカテゴリにある製品を取得できるようにしたいと考えています。

これは私のカテゴリーショーコントローラーです

@category = Category.find(params[:id])

これがカテゴリ#ショービューです。

 <b>Name of the category:</b>
<%= @category.name %>
<div class="product"
</div>
</p>

<% unless @category.children.empty? %>


       <ul id="sub-menu"> 
        <% @category.children.each do |sub1| %>
           <%= link_to (sub1.name), sub1 %>
<%end%>
<%end%>

それはすべて正常に動作します。しかし今、そのカテゴリの下にあるすべての製品を表示するビューカテゴリ/表示機能を追加したいと考えています。

このようなコードを追加しました。カテゴリ内/ショー コントローラー

@cat_id = @category.id
@product = Product.where("category_id = ?",@cat_id)

追加したカテゴリ表示ビューで

 <td><%= @product.name %></td>

次に、いくつかの製品が表示されるはずのサブカテゴリをクリックすると、製品が表示され ます

コードが正しいかどうかを確認するために、コンソールに入れました。そこでは正常に機能し、このカテゴリに関連する製品を取得します.

アプリケーションを起動したときにコードが Web サーバーで機能しない理由がわかりません。

Associations のエラーが原因でしょうか?

ありがとう !

4

4 に答える 4

1

私は両方の答えを受け入れますが、この種の問題にはActive Record Associationを使用することを提案したいと思います。これにより、ソリューションが簡単になります。

于 2013-03-11T10:58:41.477 に答える
1

find_by_1 つの製品のみを取得する場合は、モデルのヘルパー メソッドを使用できます。

@product = Product.find_by_category_id(@cat_id)

category_idこれにより、 に等しい最初の一致する製品が取得され@cat_idます。

カテゴリに属する​​すべての製品を取得する場合は、他の人が提案したようにすべての製品を取得する必要があります。

@products = Product.where(:category_id => @cat_id)

そして、ビューで:

<% @products.each do |product| %>
  <%= product.name %>
<% end -%>
于 2013-03-11T10:59:08.407 に答える
1
@product = Product.where("category_id = ?",@cat_id)

商品があれば配列を返します。したがって、配列をループする必要があります。

<% @product.each do |product| %>
  <%= product.name %>
<% end %>
于 2013-03-11T10:49:40.717 に答える
1

コントローラーでは、より読みやすい方法は、複数形を使用して、複数のオブジェクトが必要であることを示すことです。

@products = Product.where("category_id = ?", @cat_id)

次に、ビューで、これらの製品をループします

<% @products.each do |product| %>
  <%= product.name %>
<% end %>
于 2013-03-11T10:50:11.073 に答える