如何列出与某个类别相关的所有项目

时间:2017-06-05 08:01:43

标签: ruby-on-rails ruby

我想在导航面板中单击相关类别名称时显示与特定类别相关的所有项目。 这是我的导航面板

<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

2 个答案:

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