Существует ли встроенный путь или более изящный способ ограничить цифру числа верхними / нижними границами в Ruby или в направляющих?
например, что-то как:
def number_bounded (num, lower_bound, upper_bound)
return lower_bound if num < lower_bound
return upper_bound if num > upper_bound
num
end
Вот умный способ сделать это:
[lower_bound, num, upper_bound].sort[1]
Но это не очень удобно для чтения. Если вам нужно сделать это только один раз, я бы просто выполнил
num < lower_bound ? lower_bound : (num > upper_bound ? upper_bound : num)
или, если вам это нужно несколько раз, обезьяна исправьте модуль Comparable:
module Comparable
def bound(range)
return range.first if self < range.first
return range.last if self > range.last
self
end
end
, чтобы вы могли использовать его как
num.bound(lower_bound..upper_bound)
Вы также можете просто потребовать ] ruby facets , который добавляет метод clip
, который делает именно это.
Вы можете использовать min и max, чтобы сделать код более лаконичным:
number_bounded = [lower_bound, [upper_bound, num].min].max
Поскольку вы упоминаете Rails, я расскажу, как это сделать с помощью проверки.
validates_inclusion_of :the_column, :in => 5..10
Это, конечно, не приведет к автоматической корректировке числа.