我有一个使用谷歌地图地理编码器自动获取纬度和经度的应用程序。我想为它编写一个自定义验证以与其他字段验证相结合。下面是我的代码:
# lib/ext/string.rb
class String
def valid_float?
# The double negation turns this into an actual boolean true - if you're
# okay with "truthy" values (like 0.0), you can remove it.
!!Float(self) rescue false
end
end
# config/application.rb
require 'ext/string'
# post.rb
validate :check_point
def check_point
if !(lat || lng).valid_float?
...
end
end
在我的Post
表单中,我使用 firebug 输入asdf
字段:lat
,它返回了valid_float?
找不到方法的错误。
然后我尝试一些调试:
abort(lat.to_s.valid_float?) # 0.0 true
似乎除了在:lat
字段中输入的数字之外的任何字符都会变成0.0
当我输入的to_s
时候。但这to_s
是获得valid_float?
工作的唯一方法。为什么to_s
将所有文本转换为0.0
?
我也做rails c
了测试:
"1.234234".valid_float? # true
"asdf".valid_float? # false
"0.0".valid_float? # true
我必须怎么做才能让它工作?谢谢。