【问题标题】:Empty brackets '[]' appearing when using .where使用 .where 时出现空括号“[]”
【发布时间】:2013-12-31 23:01:27
【问题描述】:

我正在尝试显示标题包含“攻击”一词的所有指南。我就是这样做的:

def attack
  @guides = Guide.where(title: 'attack')
end

快速提问 - 如何使其区分大小写和限制?它可以包含单词“attack”的任何拼写,例如“AtTaCK”,并且可以包含更多单词。只要 Attack 以某种方式在其中。

然后,为了在视图中打印它们,我这样做:

<% @guides.each do |guide| %>
  <%= guide.title %>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby activerecord view controller


    【解决方案1】:

    最好使用 Rails 的 Arel SQL manager,它明确支持不区分大小写的 ActiveRecord 查询:

    t = Guide.arel_table
    Guide.where(t[:title].matches('%attack'))
    

    Here's an interesting blog post 关于使用 Arel 的不区分大小写查询的可移植性。值得一读以了解跨数据库使用 Arel 的含义。

    【讨论】:

      【解决方案2】:

      Stuarts 的回答是正确的,但是如果您不确定是否将标题保存为小写,您也可以发case insensitive search

      Stack Overflow 中有很多已回答的问题,其中包含更多数据:

      Example 1

      Example 2

      【讨论】:

        【解决方案3】:

        你可以使用lower函数:

        Guide.where("lower(title)='attack'")
        

        作为评论:解决您的问题。标题信息量不大,而且你在最后丢了一大块与你的问题无关的代码。

        【讨论】:

        • 谢谢。我省略了一些额外的绒毛。让我试试你的答案。
        • 这个答案显示了我的项目。但由于某种原因,它仍然只显示标题为“攻击”的指南。我希望显示所有具有“攻击”一词变体的指南。有什么想法吗?
        【解决方案4】:

        对于不区分大小写和标题中的任何位置,请执行...

        @guides = Guide.where("title LIKE %attack%")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-11
          • 2015-10-29
          • 1970-01-01
          • 2017-01-01
          相关资源
          最近更新 更多