Ruby Liquid::Template 渲染数组的小问题

iamtomas · March 16, 2022 · Last by iamtomas replied at March 17, 2022 · 350 hits

data = { :users => [{:id=>1},{:id=>2}] }
payload = {users: "{% for user in users %} {{ user.id }} {% endfor %}" }

@template = Liquid::Template.parse(payload.to_json)
@payload = @template.render(data.deep_stringify_keys)

JSON.parse(@payload) # => {"users"=>" 1  2 "}

可以看到最后输出是 {"users"=>" 1 2 "} ,如何返回 {"users"=>[1,2]} 这种格式(liquid 语法小白,个人认为需要改动payload格式)

字符串可以么。

Reply to bighuzi

很乐意听下你的思路

payload = {users: "{% for user in users %} {{ user.id }} {% endfor %}".split(" ").map(&:to_i) }

这样看下行不

Reply to pinewong

payload 会提前解释成如下

{:users=>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]} 

之前参考了 gem liquid 几篇 issue,都吐槽了对数组的创建不太友好,其中下面几种方式针对 liquid 语法进行修改,只是我没成功 https://github.com/Shopify/liquid/issues/699 https://github.com/Shopify/liquid/issues/1202

You need to Sign in before reply, if you don't have an account, please Sign up first.