相关疑难解决方法(0)

你如何为MySQL和Postgres编写不区分大小写的查询?

我在本地运行MySQL数据库进行开发,但部署到使用Postgres的Heroku.Heroku几乎可以处理所有事情,但是我的不区分大小写的Like语句变得区分大小写.我可以使用iLike语句,但我的本地MySQL数据库无法处理.

编写与MySQL和Postgres兼容的不区分大小写的查询的最佳方法是什么?或者我是否需要根据我的应用正在与之交谈的数据库编写单独的Like和iLike语句?

mysql database postgresql ruby-on-rails heroku

64
推荐指数
6
解决办法
5万
查看次数

Rails/ActiveRecord中不区分大小写的唯一索引?

我需要在rails中的列上创建一个不区分大小写的索引.我是通过SQL做到的:

execute(
   "CREATE UNIQUE INDEX index_users_on_lower_email_index 
    ON users (lower(email))"
 )
Run Code Online (Sandbox Code Playgroud)

这很好用,但在我的schema.rb文件中我有:

add_index "users", [nil], 
  :name => "index_users_on_lower_email_index", 
  :unique => true
Run Code Online (Sandbox Code Playgroud)

注意"无".因此,当我尝试克隆数据库以运行测试时,我得到一个明显的错误.我在这里做错了吗?我应该在rails中使用其他一些约定吗?

谢谢您的帮助.

activerecord ruby-on-rails

22
推荐指数
4
解决办法
1万
查看次数

Rails Active Record不区分大小写查找

虽然我在数据库中总体上喜欢区分大小写,但有几次我觉得很痛苦.user_name和email是我不想担心的字段的好例子 - 特别是在搜索时.

在使用以下内容保存之前,可以轻松地将字符串置为字符串:

before_save做self.email.downcase!结束

这样,user_name和电子邮件始终以小写形式保存.但是find_by_user_name和find_by_email的最佳方法是什么?我当然可以记得总是将我传递给那些方法的字符串 - 但这看起来不是很干.

我曾经考虑过覆盖find_by_email,并且在我降低电子邮件的情况下用super调用原始版本,但我没有任何运气可以搞清楚.

那么,最好的方法是什么?

PS我不认为像这样的相关帖子(如何为Rails 3编写不区分大小写的find_by_email)正试图解决同样的问题.这里带有"lower"的自定义sql对我来说是无用的,因为我已经确保所有这些值都更低 - 它是现在进入的(可能来自用户输入它的表单),我需要下载.

activerecord find ruby-on-rails-3

9
推荐指数
3
解决办法
2万
查看次数

不区分大小写的find_or_create_by_whatever

我希望能够Artist.case_insensitive_find_or_create_by_name(artist_name)[1](并且它可以在sqlite和postgreSQL上工作)

实现这一目标的最佳方法是什么?现在我只是直接向Artist类中添加一个方法(有点难看,特别是如果我想在另一个类中使用此功能,但无论如何):

  def self.case_insensitive_find_or_create_by_name(name)
    first(:conditions => ['UPPER(name) = UPPER(?)', name]) || create(:name => name)
  end
Run Code Online (Sandbox Code Playgroud)

[1]:理想情况下,这可能是Artist.find_or_create_by_name(artist_name, :case_sensitive => false),但这似乎更难实施

ruby activerecord ruby-on-rails case-insensitive

6
推荐指数
3
解决办法
4497
查看次数

使用rails和postgresql中的键值进行不区分大小写的搜索

我写的搜索功能正在运行,但我希望它不区分大小写.
我怎么能让它变得麻木不仁,虽然我不想改变条件因为它运行得很好.所有四个参数都是可选的,如果它们中的任何一个基于这种条件而存在.

conditions = {}
conditions['first_name'] = params[:first_name] unless params[:first_name].blank?
conditions['last_name'] = params[:last_name] unless params[:last_name].blank?
conditions['specialities.name'] = params[:speciality] unless params[:speciality].blank?
conditions['locations.zipcode'] = params[:zipcode] unless params[:zipcode].blank?

search = Model.using_scope.where(conditions)
Run Code Online (Sandbox Code Playgroud)

我使用PostgreSQL作为区分大小写的数据库.

ruby postgresql activerecord ruby-on-rails

3
推荐指数
1
解决办法
1744
查看次数

Rails中不区分大小写的搜索

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

@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中的帮助程序吗?这将是一个很好的.

ruby lowercase ruby-on-rails-3 ruby-on-rails-4

2
推荐指数
2
解决办法
2万
查看次数

如何在Rails应用程序中执行不区分大小写的搜索?

在Rails 3.2应用程序中,我有一个搜索字段,它在用户模型中使用以下例程.

def self.search(search)
   if search
        where('fullname LIKE ? OR email LIKE ?', "%#{search}%", "%#{search}%")
   else
        scoped
   end
end
Run Code Online (Sandbox Code Playgroud)

这似乎是执行区分大小写的搜索.如何修改它以使其不区分大小写?

非常感谢

search ruby-on-rails

0
推荐指数
1
解决办法
583
查看次数