我找到了我想要做一个最好的答案,知道我想在这里分享,首先我安装一个gem has_scope
。在我把products_controller
scope :category, -> category_id {where(:category_id => category_id)}
然后:
has_scope :category
和
def index
@products = apply_scopes(Product).all
end
然后在我的导航栏,我把
然后在我的产品型号我做这个范围此链接:
<li><%= link_to 'Oils', category: 1 %></li>
<li><%= link_to 'Wines', category: 2 %></li>
这是可能的只显示这些类型的产品类别。 但是这有一个问题! 它将工作只是如果你首先点击Products.path将显示所有的产品,然后如果你点击这些链接将正常工作。 但是,当我点击Contact.path等其他链接,然后点击Oils链接时,它将显示在导航器/联系人?category = 1中,然后不会显示像我想要的那样过滤的产品。
那么对于修复解决此问题是:
<li><%= link_to 'Azeites', '/products?category=1' %></li>
<li><%= link_to 'Vinhos', '/products?category=2' %></li>
而且你每次点击时会显示完美,非常简单的做法。谢谢你们的帮助!
来源
2015-11-12 18:48:17
rld
未经测试,但尝试'Product.joins(:category).where(category:{name:“A Category Name”})'。或者,'Category.find_by(名称:“类别名称”).products'。 – Rog