使用props_template渲染带局部变量的数组时重复输出问题咨询
关于props_template gem渲染数组的问题
我使用props_template gem渲染包含局部视图与额外本地变量的数组,写法如下:
json.array! @orders, partial: ['shared/order', locals: {employee: current_employee}, as: :order] do end
局部视图代码:
json.iid order.iid
但返回的数组所有元素均为同一个订单的iid,示例:
[{ 'iid' => 1 }, { 'iid' => 1 }, { 'iid' => 1 }]
移除locals后输出正常,各iid不同。我已fork该仓库并添加测试用例,但测试因元素重复而失败。现咨询两个问题:
- 我使用locals的方式是否存在错误?
- 若不设置
as: :order,局部视图中访问数组元素的变量名是什么?
问题1:locals的使用方式存在错误
你当前的写法把locals和as嵌套在了partial的数组参数里,这是错误的。正确格式应该是将partial、locals、as作为独立的配置项传入:
json.array! @orders, partial: 'shared/order', locals: {employee: current_employee}, as: :order do end
原写法中['shared/order', locals: {...}, as: :order]会被props_template错误识别为局部视图的路径参数,导致迭代时没有正确绑定每个订单实例,最终所有元素复用了同一个值。
问题2:默认变量名
如果不设置as: :order,局部视图中访问数组元素的变量名是局部视图文件名的单数形式。比如你的局部视图是shared/order,对应的变量名就是order;如果局部视图是shared/orders,变量名会自动转为单数order。
内容的提问来源于stack exchange,提问作者Anton Bogdanov
相关产品推荐
相关产品推荐

