2016-07-21 4 views
0

arbeite an einer Rails-Anwendung und auf der Show-Seite für eine Kategorie, ich will hier unter dieser Kategorie alle Produkte zeigen, wie meine, wie Produkte auf Schienen unter den Kategorien zeigen

Show in der Kategorie ist

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

und in meinen Ansichten es, wie ich

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

hier diese haben, ist meine Produkte Modell

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 

und meine Kategorie wie dies

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

, was ich hier falsch mache?

+0

Was mit Ihrem aktuellen Code falsch? Erhalten Sie eine Fehlermeldung? Zeigt es nicht, was Sie möchten? Was zeigt es an? – nicholas79171

+0

Ich bekomme 'undefined Methode' Kategorie 'für # ' –

+0

Kannst du die vollständige Stack-Trace hinzufügen und Modelle/category.rb –

Antwort

1

Du Finder bekommt die categor ies, nicht die Produkte:

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

Wenn Sie die richtigen Beziehungen haben, können Sie jedes Produkt in der angegebenen Kategorie laufen können. Da die Methode where die Relation zurückgibt, muss sie zuerst durchlaufen werden.

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

ist immer undefine Methode Produkte –

+0

Sie bitte Ihre Modelle zeigen - product.rb und category.rb – user1201917

+0

meine Frage –

0

Sie führen eine falsche Abfrage aus. Sie nehmen category, das ist in Ordnung, aber Sie müssen verwandte products nehmen, was Sie brauchen.

es sein sollte, @products = Category.friendly.where(name: params[:name]).first.products

dann in der Ansicht Code können Sie über Produkte einer Kategorie durchlaufen.

+0

zeigen, wie werde ich das tun? –

+0

Ersetzen Sie einfach Ihre Abfrage mit meiner, die ich in Antwort geschrieben und überprüfen Sie die Ausgabe. – Kushal

0

Try this,

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

' undefinierte Methode 'Produkte 'für #

+0

Produkt gehört zu Kategorie oder nicht? Produkttabelle muss category_id haben – Navin

Verwandte Themen