在输出中看到错误(Ruby语言)

pxyaymoc  于 2023-05-06  发布在  Ruby
关注(0)|答案(1)|浏览(101)

这是一个产品推荐部分的代码,在购物车和产品详细信息页面上显示相关产品

{% assign itemsPerColumn = columns | times:1 %}
{% assign perCol = count_product | divided_by: itemsPerColumn | ceil %}
{% assign leftOver = count_product | modulo: itemsPerColumn %}
{% assign numCols = perCol | plus: (leftOver > 0) | plus: (count_product == 1) %}
{% for row in (1..rows) %}
  <div class="row">
    {% for column in (1..columns) %}
      {% assign index = (forloop.index0 | times: rows) | plus: row | minus: 1 %}
      {% if index < count_product %}
        {% assign product = products[index] %}
        {% include 'product-card', max_height: max_height, product: product, show_vendor: show_vendor %}
      {% endif %}
    {% endfor %}
  </div>
{% endfor %}

我看到这个错误,无法找到解决方案:

Liquid syntax error (snippets/gp-product-related line 4): Expected dotdot but found comparison in "{{perCol | plus: (leftOver > 0) | plus: (count_product == 1) }}

我尝试使用模块和删除括号

niwlg2el

niwlg2el1#

该错误是因为括号在Liquid中不是有效语法。
但说实话,你的大部分问题是命名不当的变量(和冗余代码)。让我们一行一行地看,我会指出我看到的所有奇怪的东西:

{% assign itemsPerColumn = columns | times:1 %}

这是怎么回事?难道你不能直接把itemsPerColumn传递给模板,而不是一个名字不好的columns变量吗?
times: 1的意义是什么?这是多余的代码,删除它。

{% assign perCol = count_product | divided_by: itemsPerColumn | ceil %}

另一个命名不当的变量。看起来你应该在这里分配numberOfColumns
此外,您将camelCasesnake_case混合。通常在ruby中,所有变量都使用snake_case是一种惯例,但这两种样式都是有效的。然而,最好是在你使用的风格上保持一致!

{% assign leftOver = count_product | modulo: itemsPerColumn %}

我称之为leftOverItemsCount,而不是名称模糊的leftOver。(尽管我们再次混合了camelCasesnake_case…)

{% assign numCols = perCol | plus: (leftOver > 0) | plus: (count_product == 1) %}

致命错误:在Liquid中括号不是有效的语法!
这段代码实际上根本不需要(正如我将在下面展示的那样),但您可以以某种方式编写此逻辑:

{% assign numCols = perCol %}
{% if leftOver > 0 %}
  {% increment numCols %}
{% endif %}
{% if count_product == 1 %}
  {% increment numCols %}
{% endif %}

现在,回到我的主要答案。如果我们将所有变量重命名为它们真正代表的内容,逻辑实际上变得非常简单:

{% assign number_of_columns = count_product | divided_by: items_per_column | ceil %}
{% assign left_over_items_count = count_product | modulo: number_of_columns %}

相关问题