验证失败时如何防止Rails更改输入字段的内容?

时间:2010-12-17 04:41:28

标签: ruby-on-rails validation ruby-on-rails-3

我的产品型号中有一个小数price字段,并且有一个简单的验证:

class Price < ActiveRecord::Base
  ...
  validates_numericality_of :price
  ...
end

如果我错误地输入33.0p,则会说:“价格不是数字”(我同意),并将输入字段的内容从33.0p更改为33.0

因此,如果我输入33.0p并快速按下提交按钮(认为一切正常),我将收到错误消息。然后我将查看输入字段以检查出错了什么。但是,在那里我会看到一个有效的数字(33.0),我会问自己“有什么问题......?”。

有没有办法阻止Rails在验证失败时更改输入字段内容?

2 个答案:

答案 0 :(得分:2)

另一种选择是使用read_attribute_before_type_cast,即f.text_field(:price, :value => @product.read_attribute_before_type_cast(:price))

答案 1 :(得分:1)

原因与我对other question的回答相同; Rails在进程中的某个时刻将输入转换为浮点数,因此浮点值就是显示的内容。

我没有对此进行测试,但您可以尝试将文本字段的值覆盖为params[:product][:price]。从理论上讲,这看起来像是:

f.text_field(:price, :value => (params[:product] ? params[:product][:price] : @product.price))