Rails中不区分大小写的搜索

时间:2013-10-10 18:39:00

标签: ruby ruby-on-rails-3 ruby-on-rails-4 lowercase

我找到的最好的方法是搜索我特别不希望字符大小写的内容:

@tag = Rails.env.development? ? Category.where("LOWER(name) LIKE ?", "%#{params[:find]}%")[0] : Category.where("LOWER(name) ILIKE ?", "%#{params[:find]}%")[0]

我必须拥有.env查找器因为我使用Heroku,而且我不关心在我的开发机器上安装PostgreSQL。不过,有没有像:

@tag = Category.find_by_name(params[:find], case_sensitive: false)

我们可以将选项传递给Rails中的find_by助手吗?这将是一个很好的。

2 个答案:

答案 0 :(得分:14)

  

我们可以将选项传递给Rails中的find_by助手吗?这将是一个很好的...

没有。 (see the API
,这将是一个不错的选择。

你可能不接受这个答案,因为你的问题实际上不是问题 这可能是你被投票的原因。

也许你也可以小写params[:find]params[:find].downcase),并在你的开发机器上设置PG。

Category.where("LOWER(name) LIKE ?", "%#{params[:find].downcase}%").first

与此同时,您可以在模型中提取查询:

<强> category.rb

def self.search_by_name(name)
  if Rails.env.development?
    where("LOWER(name) LIKE ?", "%#{name.downcase}%").take
  else
    where("LOWER(name) ILIKE ?", "%#{name}%").take
  end       
end

<强>控制器

@tag = Category.search_by_name(params[:find])

答案 1 :(得分:6)

是的,Rails通过the built-in Arel library or a gem such as Squeel支持不区分大小写的查询。