是否可以使用具有嵌套属性的液体“where”数组过滤器?

Gri*_*fin 9 liquid shopify shopify-template

我正在尝试使用块设置来过滤块数组。我可以使用以下语法按“类型”等属性进行过滤:

\n\n

{% assign example = section.blocks | where: "type", "photos" %}

\n\n

我需要做的是按块设置进行过滤,如下所示:

\n\n

{% assign example = section.blocks | where: settings.collection, collection.handle %}

\n\n

上面的例子默默地失败了。

\n\n

注意:目前我正在使用带有 for 循环和 if 语句的捕获来完成我需要的操作,然后使用 split \xe2\x80\x94 进行分配,但代码非常臃肿,并且执行所有这些操作都是为了一个简单的过滤操作看起来很荒谬。我发现自己总是感觉自己在与液体战斗,我想我希望它可能比我想象的更优雅一点。

\n

小智 7

我对 Ruby 了解不多,但似乎无法将带有点表示法的嵌套属性传递给where过滤器。然而,在看到人们使用 访问嵌套值后map,我测试了将两者混合,并且映射过滤器似乎适合这种情况。

我在块中调用了一个布尔设置default,并且我获得了最后一个块的设置对象,并default设置为true使用以下内容:

{% assign obj = section.blocks | map: 'settings' | where: 'default' | last %}
Run Code Online (Sandbox Code Playgroud)

当然,这样您就无法获取提取的设置对象之外的数据。为此,我认为您确实需要section.blocks使用标签手动循环并查找过滤器if