【问题标题】:Rails, search with Ransack gem, downcase a stringRails,使用 Ransack gem 搜索,小写字符串
【发布时间】:2016-07-10 05:38:05
【问题描述】:

我正在尝试使用 ransack 为我的商店编写搜索表单。目前,我可以使用 name_or_address_cont 选项进行搜索,该选项在名称或地址中都可以看到。如果我在伦敦有一家阿迪达斯商店,然后我输入 Adidas London,则不会有任何结果。因此,我寻找一种方法来连接这两个属性并通过新属性进行搜索。我在一些旧帖子中发现的是以下代码:

  ransacker :search_name, :formatter => proc {|v| UnicodeUtils.downcase(v) } do |parent|
    Arel::Nodes::NamedFunction.new('LOWER',
      [Arel::Nodes::NamedFunction.new('concat_ws', [' ', parent.table[:name], parent.table[:address], parent.table[:id]])]
    )
  end

应该通过商店的名称、地址和 ID 进行搜索。但是,当我运行时,UnicodeUtils 中出现错误。我尝试将其更改为 v.downcase!但我得到另一个错误。知道如何处理这个问题吗?谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby rubygems


    【解决方案1】:

    有两个错误...我在文档中找到了如何修复第一个错误,其中有一个 full_name link 的示例

    看起来像

    ransacker :full_name, formatter: proc { |v| v.mb_chars.downcase.to_s } do |parent|
      Arel::Nodes::NamedFunction.new('LOWER',
        [Arel::Nodes::NamedFunction.new('concat_ws',
          [' ', parent.table[:first_name], parent.table[:last_name]])])
    end
    

    另外,似乎加入的 ' ' 应该替换为 Arel::Nodes.build_quoted(' ')。发现在这个issue

    【讨论】:

    • 这是正确的答案吗?搜索“伦敦阿迪达斯”时是否返回预期结果?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多