Cannot get exact value on parameter
我有下面的示例参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 | Parameters: { "utf8"=>"?", "authenticity_token"=>"xxxxxxxxxx", "post" => { "product_attributes" => { "name"=>"Ruby", "product_dtls_attributes" => { "0"=>{"price"=>"12,333.00"}, "1"=>{"price"=>"111,111.00"} }, }, "content"=>"Some contents here." } |
现在,情况是,我不能得到
而不是:
我得到:
下面是我在代码中所做的:
1 2 3 | before_validation(on: :create) do puts"price = #{self.price}" # I also tried self.price.to_s, but didn't work. end |
更新:
(我想做的是把
1 2 3 | before_validation(on: :create) do puts"price = #{self.price.delete(',').to_f}" # I also tried self.price.to_s, but didn't work. end |
注:
EDOCX1[0]列为浮动列
问题是,我如何才能得到参数
查看您提供的"价格"参数:
逗号有问题。
例如:
1 2 | irb(main):003:0>"12,333.00".to_i => 12 |
但你可以解决这个问题:
例子:
1 2 | irb(main):011:0>"12,333.00".tr(",","_").to_i => 12333 |
关键是用下划线替换逗号。原因是
顺便问一句,您是否知道您的验证方法除了打印之外什么都不做?无论如何,在这里,
1 2 3 4 5 6 7 8 | class MyModel def price=(new_price) if new_price.is_a?(String) new_price = new_price.tr(",","") end super(new_price) end end |
我的解决方案是在控制器上处理它。迭代散列,然后保存它。然后它得到我想要得到的正确值并保存正确的值。
迭代以下哈希并保存。
1 2 3 4 5 6 7 8 9 | "post" => { "product_attributes" => { "name"=>"Ruby", "product_dtls_attributes" => { "0"=>{"price"=>"12,333.00"}, "1"=>{"price"=>"111,111.00"} }, }, "content"=>"Some contents here." |
由于逗号分隔符的存在,我无法在模型中得到
你也可以这样做:
1 2 | 2.1.1 :002 >"12,333.00".gsub(',', '').to_f => 12333.0 |
这将替换逗号,如果您有任何十进制值,那么它也将解释为:
1 2 | 2.1.1 :003 >"12,333.56".gsub(',', '').to_f => 12333.56 |
价格是浮动的,但您的数据包含一个非数字字符(逗号,","。当字段转换为float时,解析可能会在该字符处停止并返回12。
不过,我原以为会有一个错误被抛出。
我建议您在将逗号放入数据库之前删除它。