我有一個模型叫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'結合起來,以根據其他屬性也是如此。 –