我需要创建一个页面,将显示所选的过滤器产品。为简单起见,我将使用产品类别作为过滤器。
页面应包含2个区域:
1.产品陈列的地方。
1.显示类别的位置和"全部清除"按钮。
- 方案:**
用户访问索引页面,所有的产品都显示。用户点击"主页类别",并获得属于此类别的所有产品。然后他点击"鞋类",现在他看到所有的产品都属于这两个类别("主页类别"或"鞋类类别")。用户点击"全部清除"按钮(以便重置所选类别),现在将显示所有类别中的所有产品。
我的代码:
我的模型Product、Category和连接表causes_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
- 产品/索引. html. erb:**
<div class="grid">
<%= render 'sidebar_menu' %>
<%= render partial: 'product_grid', locals: { products: @products} %>
</div>
- 产品/侧边栏菜单. html. erb:**
<% @categories.each do | cat | %>
<%= link_to cat.name, fetch_products_path(:cat_id => cat.id), :remote => true %>
<% end %>
- 路由. rb**
get "/fetch_products" => 'products#from_category', as: 'fetch_products'
- 产品/产品网格. html. erb:**
<div id="products_grid">
<%= render partial: 'products_list', locals: { products: products } %>
</div>
- 产品/产品列表. html. erb:**
<% products.each do |product| %>
<div class="product_box">
product.name
</div>
<% end %>
- 产品/来自类别. 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条答案
按热度按时间pxq42qpu1#
对于你的 AJAX 方法,下面是你可以使用的:
要从表单中获取
params[:cat_ids]
,请参见:Best way to get all selected checkboxes VALUES in jquery或https://api.jquery.com/checked-selector/