尝试检查范围内的字符串编号

时间:2013-08-09 19:43:23

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

我的情况是我的数据是一个数字,并保存为字符串。我有一个Range,我想检查字符串。 Range中的项是整数。我怎样才能做到这一点?下面是我写的范围的代码:

if value == "above"
  scope.where(["level > ?", level_range.last])
elsif value == "below"
  scope.where(["level < ?", level_range.first])
elsif value == "at"
  scope.where(:level => level_range)
else
  scope
end

1 个答案:

答案 0 :(得分:2)

您说level号码存储为字符串。首先,那有点愚蠢;如果可以,请修复架构以存储为数字。如果您无法更改架构,并且您的数据库符合ANSI标准,则可以对存储的值使用CAST()来执行与范围参数的整数比较。

if value == "above"
  scope.where(["CAST(level AS INTEGER) > ?", level_range.last])
elsif value == "below"
  scope.where(["CAST(level AS INTEGER) < ?", level_range.first])
elsif value == "at"
  scope.where(["CAST(level AS INTEGER) BETWEEN ? AND ?",
              level_range.first, level_range.last])
else
  scope
end

有一点需要注意,如果字符串不是有效的整数表示,则CAST的行为是抛出错误;这是在架构中正确键入数据的另一个好理由。