我是RoR的新手。
问题是,我用Ancesrty创建了功能齐全的产品分类。但现在我希望能够检索这些子类别下的产品。
这是我的类别show controller
@category = Category.find(params[:id])
这是类别#show view。
<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>
然后点击一些应该出现少数产品的子类别,只显示产品
要检查代码是否正确,我将其放入控制台。它工作正常,并检索与此类别相关的产品。
我不明白为什么当我启动应用程序时代码无法在网络服务器中运行?
可能是因为协会中的某些人?
谢谢!
答案 0 :(得分:1)
@product = Product.where("category_id = ?",@cat_id)
如果有任何产品,将返回一个数组。所以你需要遍历数组。
<% @product.each do |product| %>
<%= product.name %>
<% end %>
答案 1 :(得分:1)
在你的控制器中,更可读的方法是使用复数形式来表示你期望超过1个对象
@products = Product.where("category_id = ?", @cat_id)
然后在视图中,循环浏览这些产品
<% @products.each do |product| %>
<%= product.name %>
<% end %>
答案 2 :(得分:1)
我接受了这两个答案,但我想建议使用Active Record Association来解决这类问题。这使您的解决方案更容易。
答案 3 :(得分: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 -%>