【问题标题】:Search string as integer with Ransack in Rails在 Rails 中使用 Ransack 将字符串搜索为整数
【发布时间】:2014-10-21 10:18:42
【问题描述】:

我正在使用 Ransack gem 为模型设置搜索表单。该模型有一个字段:size,它被存储为一个字符串。我想做一个比较搜索“使用 lte 和 gte”。使用 ransack 搜索时,如何将此字段转换为整数?

【问题讨论】:

    标签: ruby-on-rails ransack


    【解决方案1】:

    您是否尝试过设置一个返回字符串长度的简单方法?

    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
    

    【讨论】:

    • 我看不出这有什么帮助。 “5”的长度是1,“9”的长度也是1。
    • 啊。所以你实际上有一个数字是一个字符串,而不是相互比较字符串。从您的问题中没有发现。
    • 有什么原因不能使用普通的lteq 和gteq? "5" < "1" => false 即使作为字符串也应该返回正确,无需将它们转换为 int
    猜你喜欢
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    相关资源
    最近更新 更多