Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Rails中不区分大小写的搜索_Ruby_Ruby On Rails 3_Ruby On Rails 4_Lowercase - Fatal编程技术网

Ruby Rails中不区分大小写的搜索

Ruby Rails中不区分大小写的搜索,ruby,ruby-on-rails-3,ruby-on-rails-4,lowercase,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 = 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_的选项?这将是一个很好的

在Rails中是否有可以传递给find_by helper的选项?这将是一个很好的一个

没有。()
是的,那将是一个不错的选择

您可能不会接受此答案,因为您的问题不是真正的问题
这可能就是你被否决的原因

也许您还可以将
参数[:find]
参数[: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])

是的,Rails通过支持不区分大小写的查询。

因此,下一个看到这一点的人会想,‘对于这个家伙,向下投票’,请告诉我你为什么这么想。谢谢。我没有投反对票,但人们可能会投反对票,因为你在开始时说了一句对你的问题毫无意义的冷嘲热讽的话……我删除了这句话,因为这是一个不符合逻辑的话。请注意。但我错了吗<代码>区分大小写:
顺序:
唯一:
?为什么不传递一些选项,让
find_by
helper发挥更大的作用呢?好吧,我们可以在它之后做
.uniq
,所以这是没有意义的,但我相信人们可以想出一些好的方法。嗯,有一个问题。你回答了。。。不,没有选项哈希。如果数据库中的信息也是小写,则可以执行
.downcase
。我可以对所有内容进行降格,就像我在将用户电子邮件保存到DB时所做的那样,但首字母缩写词和初始ISM肯定是大写的。对于标签,我认为这一点很重要。PG不是问题,我只是解释了为什么我在那里有
Rails.env.development?
。因此,
find\u by
的选项散列。关于我们如何实现这一点,有什么想法吗?我在
activerecord-3.2.13/lib/active\u record/dynamic\u finder\u match.rb中检查了源文件,可以验证是否没有选项。它使用正则表达式来解释您要查找的内容,但我没有看到实际的搜索功能…我的意思是将搜索词和db值都小写:
Category.where(“LOWER(name)ILIKE?”,“%#{params[:find].downcase}%”[0]
。我在想“也许你也应该……”但写了“也许你也可以……”让它听起来更像是一个建议。而且,我不会建议你自己去实现它,因为你最终会对rails进行修补。现在只需在您的模型中提取查询,并在Github上打开一个问题,看看人们是否愿意在Rails中正式实现它。我不同意您需要做这项工作。使用。Arel内置于Rails中。Arel是否包含在Rails中?我是否必须将其包含在application.rb或控制器顶部?像
包含“开放uri”
?不,不需要这样的内容。只要开始使用它。Arel已经在导轨中使用“引擎盖下”。