【发布时间】:2014-10-21 10:18:42
【问题描述】:
我正在使用 Ransack gem 为模型设置搜索表单。该模型有一个字段:size,它被存储为一个字符串。我想做一个比较搜索“使用 lte 和 gte”。使用 ransack 搜索时,如何将此字段转换为整数?
【问题讨论】:
标签: ruby-on-rails ransack
我正在使用 Ransack gem 为模型设置搜索表单。该模型有一个字段:size,它被存储为一个字符串。我想做一个比较搜索“使用 lte 和 gte”。使用 ransack 搜索时,如何将此字段转换为整数?
【问题讨论】:
标签: ruby-on-rails ransack
您是否尝试过设置一个返回字符串长度的简单方法?
def size_length
size.length
end
那么你的洗劫可能是Model.search(:size_length_lteq => comparison)?
还有一个自定义匹配器呢?不确定这是否可行,但可能值得一试。
# config/initializers/ransack.rb
Ransack.configure do |config|
config.add_predicate 'string_lteq',
arel_predicate: 'lteq',
formatter: proc { |v| v.length },
validator: proc { |v| v.present? },
type: :string
end
【讨论】:
lteq 和gteq? "5" < "1" => false 即使作为字符串也应该返回正确,无需将它们转换为 int