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

iamtomas · 2022年03月16日 · 最后由 iamtomas 回复于 2022年03月17日 · 350 次阅读

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格式)

字符串可以么。

bighuzi 回复

很乐意听下你的思路

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

这样看下行不

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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号