使用.where时出现空括号'[]'

时间:2013-12-31 23:01:27

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

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

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

快速提问 - 如何使其区分大小写且具有限制性?它可以包含“攻击”这个词的任何拼写,如“AtTaCK”,它可以包含更多单词。只要攻击以某种方式进入它。

然后,要在视图中打印出来,我这样做:

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

4 个答案:

答案 0 :(得分:3)

一个好的选择是利用Rails'Arel SQL manager,它明确支持不区分大小写的ActiveRecord查询:

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

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

答案 1 :(得分:1)

您可以使用lower功能:

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

作为评论:处理你的问题。这个标题并不是非常有用,你最后会丢掉一大堆与你的问题无关的代码。

答案 2 :(得分:1)

Stuarts的回答是正确的,但如果你不确定是否用小写保存标题,你也可以制作一个case insensitive search

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

Example 1

Example 2

答案 3 :(得分:0)

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

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