我有一个模型叫Update
其中包含列:version
这是一个字符串。Rails:使用ActiveRecord与自定义比较器
class Update < ApplicationRecord
validates_presence_of :version
end
的version
列包含字符串值如1.0.1
。使用Gem::Version
,你可以比较的版本号是这样的:
Gem::Version.new('2.1') > Gem::Version.new('2.0.1')
我想做一个查询在那里我可以version
得到所有的记录超过一定的数量。有没有办法将自定义方法传递给.where
以便我可以使用版本比较器?如:
class Update < ApplicationRecord
def version_is_greater_than(that_version)
Gem::Version.new(self.version) > Gem::Version.new(that_version)
end
end
...
Update.where(&:version_is_greater_than)
正如你可以看到,上述代码不能正常工作,因为我需要一个版本字符串传递到我似乎无法做到这一点的方法通过&:
。有没有更好的方法来做到这一点,以便我可以比较.where
调用中的值?我试图远离分裂大/小/等。数字,因为我只是在那里重新发明轮子。
我正在使用Postgres。简单的'1.2.3'格式是可以接受的。这与我的任何宝石版本无关 - 但我认为比较器至少足够满足我的需求。 –
我觉得这很容易做到'Update.all.select {| u | Gem :: Version.new(u.version)> Gem :: Version.new(“2.0”)}'但我只是想知道是否有一种方法将它与'.where'结合起来,以根据其他属性也是如此。 –