在新页面中显示类别中的产品

时间:2009-08-18 18:52:09

标签: ruby-on-rails ruby routes

我在Rails中遇到问题,当用户点击正确的链接,类别和产品有HABTM关系时,我想在单独的页面上显示每个类别的产品,我可以看到结果,但我不想显示它们在默认页面(路线)中。我应该创建一个新的路由规则,还是可以在控制器和视图中实现,而无需编辑路由?

这是show.html.erb的类别代码:

<h3><%=h @category.name %></h3>
<div id="category_desc">
    <%=h truncate(@category.description.gsub(/<.*?>/,''),80) %>
</div>
<div id="categories_edit_nav">
    <%= link_to "Edit" , edit_category_path(@category) %>
    <%= link_to "Remove" , category_path(@category) , :confirm => "Are you really want to delete #{@category.name} ?" , :method => "delete" %>
</div>
<div id="category_nav">
    <%= link_to "Create a new Category" , new_category_path %>
</div>

在这里,我可以为类别控制器创建一个方法,如:

  def show_products
    @products_in_category = @category.products.find(:all)    
  end

并在show view中使用它,但我想在另一个视图中使用它,比如show_products。我应该为这种方法创建路线吗?

1 个答案:

答案 0 :(得分:0)

您应该使用嵌套资源:

map.resources :categories, :has_many => :products

这将创建诸如/ categories / 1 / products之类的路由,这些路由会将查询定向到产品控制器和索引操作,您可以使用params [:category_id]来呈现正确的结果集。

在试验路线时,请运行佣金路线以查看结果,并查看http://api.rubyonrails.org/classes/ActionController/Resources.html了解更多详情。