0

我是 RoR 的新手。

问题是,我使用 Ancesrty 创建了功能齐全的产品分类。但现在我希望能够检索这些子类别下的产品。

这是我的类别显示控制器

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

这是类别#show 视图。

 <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>

然后点击一些应该出现几个产品的子类别,那里只显示 产品

为了检查代码是否正确,我输入了控制台。它在那里工作正常并检索与此类别相关的产品。

我不明白为什么当我启动应用程序时代码在网络服务器中不起作用?

可能是因为 Associations 中的一些错误吗?

谢谢 !

4

4 回答 4

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

如果有任何产品,将返回一个数组。所以你需要遍历数组。

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

在您的控制器中,一种更易读的方法是使用复数形式来表示您期望超过 1 个对象

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

然后在视图中,只需循环这些产品

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

我接受这两个答案,但我想建议使用Active Record Association来解决这类问题。这使您的解决方案更容易。

于 2013-03-11T10:58:41.477 回答
1

如果您只想获取一种产品,可以使用find_by_模型的辅助方法:

@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 回答