如何在 rails 的类别下显示产品

how to show products under the categories on rails

我正在开发一个 rails 应用程序并在某个类别的显示页面上,我想显示在该类别下找到的所有产品 这是我的

显示在类别中的是

def show
    @products = Category.friendly.where(params[:name])
  end

在我看来我是这样的

<% @products.each do |product| %>

<%= link_to product_path(id: product.slug, category_name: product.category.name), class: "card" do %>
<div class="product-image">
<%= image_tag product.productpic.url if product.productpic? %>
</div>

  <div class="product-text">
    <h2 class="product-title"> <%= product.name %></h2>
      <h3 class="product-price">£<%= product.price %></h3>
  </div>

    <% end %>
<% end %>

这是我的产品型号

class Product < ApplicationRecord
  belongs_to :category
  mount_uploader :productpic, ProductpicUploader
   has_many :order_items
acts_as_taggable
extend FriendlyId
friendly_id :name, use: [:slugged, :finders]
 default_scope { where(active: true) }
end

我的分类是这样的

class Category < ApplicationRecord
  has_many :products
  extend FriendlyId
 friendly_id :name, use: [:slugged, :finders]
end

我做错了什么?

您正在执行错误的查询。你正在服用 category 这很好,但你必须服用相关的 products 这就是你所需要的。

应该是, @products = Category.friendly.where(name: params[:name]).first.products

然后在视图代码中,您可以迭代一个类别的产品。

您找到的是类别类别,而不是产品:

def show
  @categories = Category.friendly.where(params[:name])
end

如果你有适当的关系,你可以迭代给定类别中的每个产品。由于方法 where returns 关系,首先你需要遍历它。

<% @categories.each do |category| %>
  <% category.each do |product| %>
    <div class="product-category">
      Category:
      <%= product.category.name %>
    </div>
    <div class="product-text">
      <h2 class="product-title"> <%= product.name %></h2>
      <h3 class="product-price">£<%= product.price %></h3>
    </div>
  <% end %>
<% end %>

试试这个,

def show
  category = Category.friendly.find_by_name(params[:name])
  @products = category.products
end