我的数据库中有一个名为device
的东西
我想从数据库设备中提取语义版本大于/等于“ 1.2.42”,并且设备状态是否在线
我有方法
def check_sem_ver
basic_sem_version = "1.2.42"
device_base_ver = Device.harware_info["software-version"].split("-").first
return Gem::Version.new(device_base_ver) >= Gem::Version.new(basic_sem_version)
end
我还有一个名为
的范围 scope :proper_sem_version, -> { where(online-status: 'online).and(check_sem_ver) }
但这不起作用,仅当check_sem_ver
为真时,如何才能从数据库中提取内容?
不幸的是,像where(software-version > '1.2.42')
之类的基本数学无法正常工作,因为version是带有-
的字符串,如您所见,我必须拆分才能摆脱。
有什么想法吗?
答案 0 :(得分:0)
要对版本字符串进行预期的比较,需要将它们转换为数组。
如果您使用的是Postgres,则可以构建如下范围:
BasicSemVersion = "1.2.42"
def query_threshold
BasicSemVersion.split('.').join(',')
end
scope :proper_sem_version, -> { where("online-status='online' and string_to_array(software-version,'.')::int[]>=ARRAY[#{query_threshold}]") }