Rails中不区分大小写的搜索

Dud*_*udo 2 ruby lowercase ruby-on-rails-3 ruby-on-rails-4

我发现搜索我特别不想要字符大小的事情的最好方法是:

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

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

@tag = Category.find_by_name(params[:find], case_sensitive: false)
Run Code Online (Sandbox Code Playgroud)

我们可以将选项传递给find_byRails中的帮助程序吗?这将是一个很好的.

Dam*_*ien 14

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

,没有.(参见API)
是的,这将是一个很好的.

你可能不接受这个答案,因为你的问题不是一个真正的问题.
这可能是你被投票的原因.

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

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

在此期间,您可以在模型中提取查询:

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
Run Code Online (Sandbox Code Playgroud)

调节器

@tag = Category.search_by_name(params[:find])
Run Code Online (Sandbox Code Playgroud)

  • 我不同意你需要做这项工作.使用[Arel或Squeel](http://robb.weblaws.org/2013/12/05/yes-rails-supports-case-insensitive-database-queries/).Arel内置于Rails. (2认同)

Dog*_*her 6

是的,Rails通过内置的Arel库或像Squeel这样的gem支持不区分大小写的查询.