Я предполагаю, что вы действительно хотите хранить диапазон в вашей модели, а не значение в пределах диапазона. (Если вы хотите сделать последнее, ваш ответ будет подтвержден).
Итак, ассортимент. В модели. У вас есть два варианта, каждый из которых довольно приличный.
Вариант 1: Создать столбец (range_column
) с типом «текст». Передайте объект диапазона Ruby в столбец, например @my_model_object.range_column = (50..100)
. Скажите Rails, чтобы сериализовать ваш диапазон следующим образом:
class MyModel < ActiveRecord::Base
serialize :range_column
end
Теперь Rails автоматически преобразует ваш диапазон в YAML для хранения базы данных и преобразует его обратно в объект диапазона, когда снова получает запись. Не намного легче, чем это!
Вариант 2: Создать два столбца (range_start
и range_end
) с типом 'целое число'. Настройте что-нибудь в своей модели следующим образом:
class MyModel < ActiveRecord::Base
def range=(rstart, rend)
self.range_start = rstart
self.range_end = rend
end
def range
(range_start..range_end) # or as an array, or however you want to return it
end
end
Первый вариант проще (и, на мой взгляд, лучше), тогда как второй дает вам немного больше гибкости из коробки, если вы не хотите использовать объект диапазона Ruby (хотя, почему бы не так ли?).