使用Rails&amp ;;按类别过滤产品AJAX

时间:2016-04-19 12:54:39

标签: ruby-on-rails ajax


我需要创建一个页面,通过选择的过滤器显示产品。为简单起见,我将使用产品类别作为过滤器。

页面应该有两个区域:

  1. 显示产品的位置。
  2. 显示类别和“全部清除”按钮。

  3. 情境:

    用户访问索引页面,显示所有产品。 用户单击“主页类别”并获取属于此类别的所有产品。然后他点击“鞋子类别”,现在他看到属于这两个类别的所有产品(“家庭类别”或“鞋子类别”)。用户点击“全部清除”按钮(为了重置所选类别),现在显示所有类别的所有产品。

    我的代码:

    我的模型产品,类别和连接表cause_products。

    分类

    class Category < ActiveRecord::Base has_and_belongs_to_many :products end

    产品

    class Product < ActiveRecord::Base has_and_belongs_to_many :categories end

    产品控制器:

    class ProductsController < ApplicationController
      def index
        @products = Product.all
        @categories = Category.all
      end
      def from_category
        @products = Product.joins(:categories).where(categories: { id: params[:cat_id] })
        respond_to do |format|
          format.js
        end
      end
    end
    


    产品/ index.html.erb:

    <div class="grid">
      <%= render 'sidebar_menu' %>
      <%= render partial: 'product_grid', locals: { products: @products} %>
    </div>
    


    产品/ _sidebar_menu.html.erb:

    <% @categories.each do | cat | %>
    <%= link_to cat.name, fetch_products_path(:cat_id => cat.id), :remote => true %>
    <% end %>
    


    的routes.rb

    get "/fetch_products" => 'products#from_category', as: 'fetch_products'
    


    产品/ _products_grid.html.erb:

    <div id="products_grid">
      <%= render partial: 'products_list', locals: { products: products } %>
    </div>
    


    产品/ _products_list.html.erb:

    <% products.each do |product| %>
        <div class="product_box">
          product.name
        </div>
    <% end %>
    


    产品/ from_category.js.erb:

    $("#products_grid").html("<%= escape_javascript(render partial: 'products_list', locals: { products: @selected } ) %>");
    


    该代码仅适用于所选类别,但我希望它能够过滤两个或更多类别。我需要做出哪些改变?

    感谢。


    感谢您@max@Jeffrey M Castro帮助我完成previous question

    感谢sebastialonso的文章“How to partials & AJAX, dead easy”。

1 个答案:

答案 0 :(得分:0)

对于您的ajax方法,您可以使用以下内容:

def from_category
  category_ids = params[:cat_ids]
  @products = Product.joins(:categories).where("categories.id IN (?)", category_ids)
  respond_to do |format|
    format.js
  end
end

要从表单中获取params[:cat_ids],请参阅: Best way to get all selected checkboxes VALUES in jquery 要么 https://api.jquery.com/checked-selector/