条件在控制台中工作但不在Web服务器中的rails

时间:2013-03-11 10:42:58

标签: ruby-on-rails categories

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

然后点击一些应该出现少数产品的子类别,只显示产品

要检查代码是否正确,我将其放入控制台。它工作正常,并检索与此类别相关的产品。

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

可能是因为协会中的某些人?

谢谢!

4 个答案:

答案 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 -%>