如何访问参数中带动态Token键的嵌套属性?
如何访问嵌套属性中的动态Token键值
嘿,我来帮你搞定这个问题!你遇到的是Rails表单动态生成嵌套属性时的常见小坑——那些像1664413214142的时间戳Token键,访问方式不对就拿不到里面的值。
直接访问特定Token项(如果知道键名)
那些动态生成的Token键是字符串类型,你之前用符号(比如:1664413214142)去访问肯定拿不到结果,换成字符串键就可以了:
# 用字符串键直接访问,就能拿到produto_id produto_id = params[:comanda][:itens_comandas_attributes]["1664413214142"][:produto_id] puts produto_id # 会输出 "1"
遍历所有动态子项(更通用的做法)
不过这些Token每次提交表单都会变,硬编码键名肯定不现实,最好的方式是遍历所有子项:
# 遍历itens_comandas_attributes下的所有条目 params[:comanda][:itens_comandas_attributes].each do |token, item_data| puts "当前条目Token: #{token}" puts "对应的商品ID: #{item_data[:produto_id]}" # 还能顺便处理valor、quantidade这些属性 end
为啥之前访问没内容?
你说puts params[:comanda][:itens_comandas_attributes]没返回内容,大概率是控制台输出时大哈希被截断了,试试用inspect方法查看完整内容:
puts params[:comanda][:itens_comandas_attributes].inspect
另外,用符号访问数字开头的字符串键(比如:1664413214142)是无效的,因为原始哈希里的键是字符串类型,两者匹配不上。
额外提醒:Rails强参数要配置对
如果是在控制器里处理这些参数,记得在强参数里允许嵌套属性,不然会被过滤掉:
def comanda_params params.require(:comanda).permit( :cliente_id, :forma_pagamento_id, :"R$valor_total", :status, itens_comandas_attributes: [:produto_id, :valor, :quantidade, :_destroy] ) end
注意那个带特殊字符的键"R$valor_total",要写成:"R$valor_total"这种形式才能被强参数识别。
内容的提问来源于stack exchange,提问作者Lucas Lima
相关产品推荐
相关产品推荐

