Rails 5中使用with_index控制产品变体缩略图显示的问题排查
解决产品变体缩略图显示的问题
嘿,我明白你遇到的困扰了!你想要的效果是只有当产品有2个及以上变体时,才渲染缩略图滑块,但之前用with_index的思路刚好搞反了逻辑,才会出现只显示第一个变体缩略图的问题。
问题出在哪?
你之前尝试用with_index只在索引大于0时显示,这意味着如果有3个变体,你会跳过第一个,只显示第2、3个;如果只有1个变体,索引0不满足条件,就完全不显示——这看似符合单个变体不显示的需求,但多变体时又少了第一个,显然不是你要的结果。
正确的解决方案
核心逻辑应该是先判断变体的总数,只有总数≥2时,才渲染整个缩略图滑块(并显示所有变体的缩略图),Rails里有个很方便的方法many?可以直接判断集合是否有多个元素,比count > 1更简洁。
举个ERB的代码示例:
<%# 先判断是否有多个变体,再渲染滑块 %> <% if @product.variations.many? %> <div class="product-thumbnail-slider"> <% @product.variations.each do |variation| %> <img src="<%= variation.thumbnail_image_url %>" alt="<%= variation.title %>" class="slider-thumbnail" > <% end %> </div> <% end %>
为什么这样可行?
- 当产品只有1个变体时,
many?返回false,整个滑块区块不会被渲染,完美符合你的需求; - 当产品有2个及以上变体时,
many?返回true,所有变体的缩略图都会被正常渲染出来,和你原本的功能逻辑一致。
如果之后你想调整单个变体时的显示逻辑(比如显示主图但不做滑块),只需要在else块里补充对应的代码就行~
内容的提问来源于stack exchange,提问作者Charles Smith
相关产品推荐
相关产品推荐

