首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将散列值转换为SQL查询的适当数据类型

如何将散列值转换为SQL查询的适当数据类型
EN

Stack Overflow用户
提问于 2017-04-09 23:02:26
回答 1查看 267关注 0票数 1

我遇到的问题是,为了在where子句中获得成功,散列中的值可能不是正确的数据类型(举个例子)。

例如,可以在URL上传递筛选器参数:有些是字符串,有些是数字,有些是布尔值。最后的散列将类似于filter_parms:{id:"1“、active:"true”、name:“John”等等。问题应该是显而易见的:一切都被视为字符串。我试图找到一种方法来自动强制这些值成为正确的数据类型(例如," 1“=> 1、"true”=> true),以一种很好的、优雅的方式来实现,而不需要循环并造成编码混乱。

最终目标是能够在如下内容中使用哈希: Person.where(filter_parms)。这对于字符串字段很好,但对于布尔和int则不行。

我尝试过使用sanitize_sql_for_conditions,但是它的输出与输入数据类型完全匹配,无需进行任何修改。

我想有明显的东西我错过了。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-09 23:11:05

您可以这样做来规范您的数据:

代码语言:javascript
运行
复制
def normalize(value)
  case (value)
  when 'true'
    true
  when 'false'
    false
  when 'null','nil'
    nil
  when /\A-?\d+\z/
    value.to_i
  when /\A-?\d+\.\d+\z/
    value.to_f
  else
    value
  end
end

这里存在错误解释值的风险,比如如果一个字段可以包含字符串文本"true",而您希望将其保存下来,就会损坏它,同样,表单8889991111的电话号码也会被强制转换为可能不适合32位格式的数字,因此对某些系统来说,这可能是一个问题。

之所以没有自动的方法,是因为像这样的转换并不难,而且很多转换都是上下文相关的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43312832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档