2016-07-21 5 views
0

трудятся на приложение рельсы и на шоу странице для категории, я хочу, чтобы показать все товары, найденных в рамках этой категории здесь как мойкак показать продукцию под категориями на рельсах

шоу в категории является

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 

, что я делаю неправильно здесь?

+0

Что случилось с вашим текущим кодом? Вы получили сообщение об ошибке? Разве это не отображает то, что вы хотите? Что он отображает? – nicholas79171

+0

i get 'undefined method' category 'для # ' –

+0

Можете ли вы добавить полную трассировку стека и показать модели/category.rb –

ответ

1

Вы нашедший ему присваивают Categor х годов, а не продукты:

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

Если у вас есть соответствующие отношения, вы можете перебирать каждый продукт в данной категории. Поскольку метод where возвращает отношение, вам сначала нужно перебирать его.

<% @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 %> 
+0

подводит Undefine продуктов метода –

+0

Пожалуйста, покажите ваши модели - product.rb и category.rb – user1201917

+0

отредактировали мой вопрос –

0

Выполняется неправильный запрос. Вы принимаете category, что хорошо, но вы должны принять связанные products, что вам нужно.

она должна быть, @products = Category.friendly.where(name: params[:name]).first.products

затем в коде представления, вы можете перебирать продукты категории.

+0

как я это сделаю? –

+0

вы просто заменяете свой запрос моим, который я опубликовал в ответ и проверяю вывод. – Kushal

0

Попробуйте это,

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

' undefined method 'products 'for #

+0

Продукт принадлежит Категория или нет? Таблица продуктов должна иметь category_id – Navin

Смежные вопросы