如何根据点击的类别过滤和显示所有产品

时间:2015-07-21 06:04:24

标签: ruby-on-rails ruby

请帮我解决方案,我想根据这样的类别显示产品

 eg:  products
      -sarees
      -salwars 

当我点击纱丽时,我想显示所有与纱丽相关的产品,当我点击Salwars时,我想显示所有与salwars相关的产品

这是我的代码 的 show.html.slim

        li
        a href="#{shop_index_path}" 
          | Product  
          span.arrow ▼
        ul.sub-menu
         - @category.each do |cat|
          li
            a href="#" 
              =cat.name 

我的 productscontroller.rb

def show
 @category = Category.all 
end 

我的模型 category.rb

class Category < ActiveRecord::Base
   has_many :products
end 

模型 product.rb

class Product < ActiveRecord::Base
  belongs_to :category
end 

2 个答案:

答案 0 :(得分:0)

@sreena,我首先建议让它尽可能简单,然后再添加AJAX

让我们说你的路线文件看起来像这样

Rails.application.routes.draw do
  resources :products
end

将您的show.html.slim更改为index.html.slim并修改:

 ul.sub-menu
     - @categories.each do |cat|
      li
        = link_to cat.name, category_path(cat)

您的products_controller.rb

def index
  @categories = Category.all 
end

def show
  @category = Category.find(params[:id])
end

现在你有一个基本的indexshow工作!

在您完成工作AJAX之后,如果它不是问题。

答案 1 :(得分:0)

解决此问题的一种方法是为类别下的产品设置嵌套控制器。像category /:category_id / products这样的东西。因此,此路线上的GET将直接搜索所提供类别下的所有产品。 在锚标签上,您将需要使用

链接到这些产品
 - @category.each do |cat|
    li
      =link_to cat.name, category_products_path(cat), remote: true 

     #products

在产品控制器中,我们定义索引操作

 def index
    @category = Category.find(params[:category_id])
    @products = @category.products
 end

显示产品定义products / index.js.slim

 $('#products').html('#{escape_javascript(render(@products))}');

产品/ _product.html.slim部分

 li
   = product.name