我想在导航面板中单击相关类别名称时显示与特定类别相关的所有项目。 这是我的导航面板
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><%=link_to "About us" ,pages_about_path %></li>
<li><%=link_to "Contact us" ,pages_contact_path %></li>
<% @categories.each do |category| %>
<li><%=link_to category.name,category %><br></li>
<%end%>
</ul>
这是我的类别
的节目视图的代码<div class="container">
<div class="col-md-12">
<h1><%= @category.name %></h1>
<div>
<% @items.each do |item| %>
<div class="col-sm-4">
<div class="panel panel-primary">
<div class="panel-heading">
<%= link_to item.title,item,class:"btn btn-primary btn-block" %>
</div>
<div class="panel-body">
Quantity :<%= item.qty %><br>
Price : <%= number_to_currency(item.price, unit: "RS " ) %><br>
</div>
<div class="panel-footer">
<%= link_to "Edit" ,edit_item_path(item) , class: "btn btn-default" %>
<%= link_to "Delete" ,item , :confirm => "Are you sure?" , :method => :delete , class: "btn btn-danger"%>
<hr>
</div>
</div>
</div>
<%end%>
这是类别控制器的方法。
def show
@category =Category.find(params[:id])
@items = Item.all
end
当我使用这些块时,所有项目都会显示出来。
这是数据库表的方式
class CreateItems < ActiveRecord::Migration[5.0]
def change
create_table :items do |t|
t.string :title
t.float :qty
t.decimal :price
t.integer :category_id
t.timestamps
end
end
end
class CreateCategories < ActiveRecord::Migration[5.0]
def change
create_table :categories do |t|
t.string :name
t.timestamps
end
end
end
答案 0 :(得分:1)
@items = Item.all
会返回所有项目,而不考虑类别。您需要将其更改为@items = @category.items
def show
@category = Category.find(params[:id])
@items = @category.items
end
答案 1 :(得分:1)
类别控制器显示应更改如下:
def show
@category = Category.find(params[:id])
@items = @category.items #Item.all returns all items irrespective of a category
end
在此之前,请确保在类别模型和项目模型中定义了has_many和belongs_to关联,
在分类模型(category.rb)中,
has_many :items
在物品型号(item.rb)中,
belongs_to :category