rails控制器调用嵌套属性的参数

时间:2016-11-25 09:50:23

标签: ruby-on-rails

提交以下参数

Parameters: {[...] "physicalinventario"=>{[...] "physicalinventarioitems_attributes"=>{"0"=>{"quantity"=>",85"}}}, "commit"

目标是拦截physicalinventarioitem控制器create操作中的数量参数,并在输入十进制值时清除可能的逗号

if params[:physicalinventario][:physicalinventarioitems_attributes][:quantity].include? ","
  params[:physicalinventarioitem][:quantity] = params[:physicalinventario][:physicalinventarioitems_attributes][:quantity].tr!(',', '.').to_d
end

但是,语法错误,因为处理逗号后没有值。

2 个答案:

答案 0 :(得分:1)

如果您只有一个数量,那么@Alex答案就可以了。

但如果您有多个数量,那该怎么办

例如:{"0"=>{"quantity"=>",85"},"1"=>{"quantity"=>",90"}}

所以,这里的答案也达到了多个嵌套属性的要求。

hash = {"physicalinventario"=>{"physicalinventarioitems_attributes"=>{"0"=>{"quantity"=>",85"},"1"=>{"quantity"=>",90"}}}}

您需要的代码,

hash["physicalinventario"]["physicalinventarioitems_attributes"].each do |key, value|
    if value["quantity"].include? ","
    value["quantity"] = value["quantity"].tr!(',', '.').to_f
    end
end

以下是结果哈希

`{"physicalinventario"=>{"physicalinventarioitems_attributes"=>{"0"=>{"quantity"=>0.85}, "1"=>{"quantity"=>0.9}}}}`

答案 1 :(得分:0)

您似乎错过了链中的["0"]来获取:数量。

应该是

params[:physicalinventario][:physicalinventarioitems_attribu‌tes]["0"][:quantity]

最方便的Rails方法来清理(规范化)模型中的数据。 要创建重复项,请点击此处How best to sanitize fields in ruby on rails