Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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 on rails 在my rails应用程序上使搜索不区分大小写_Ruby On Rails - Fatal编程技术网

Ruby on rails 在my rails应用程序上使搜索不区分大小写

Ruby on rails 在my rails应用程序上使搜索不区分大小写,ruby-on-rails,Ruby On Rails,使用此gem:我已成功在我的应用程序上设置搜索。这里是使用的范围 scope :search_by_name, ->(name){ where(name: name) } 假设有一个名字叫“Jonathon”,你搜索“jon”,我希望它能给出这个结果。另外,现在如果你搜索“乔纳森”(将J改为J),它不会显示结果。在数据库之间保持可移植性,请考虑将范围更改为命名方法,并使用ARIL匹配。 def search_by_name(name) where(arel_table[:name].

使用此gem:我已成功在我的应用程序上设置搜索。这里是使用的范围

scope :search_by_name, ->(name){ where(name: name) }

假设有一个名字叫“Jonathon”,你搜索“jon”,我希望它能给出这个结果。另外,现在如果你搜索“乔纳森”(将J改为J),它不会显示结果。在数据库之间保持可移植性,请考虑将范围更改为命名方法,并使用ARIL匹配。

def search_by_name(name)
  where(arel_table[:name].matches(name))
end
尽管范围可能会起作用:

scope :search_by_name, ->(name){ where(arel_table[:name].matches(name)) }
由于命名作用域与方法相同,特别是当您向其传递lambda变量时,它作为方法而不是作用域没有任何缺点

您可能需要在name参数前面加上或附加一个
%
(或两者都加),以便它查找包含该参数的任何内容(而不是只查找完全不区分大小写的匹配项)。因此可能

def search_by_name(name)
  where(arel_table[:name].matches('%' + name + '%'))
end

假设数据库区分大小写(如postgresql),如果查看链接站点中的文档()您将看到他们如何通过使用
LOWER
和简化搜索条件来显示如何搜索。这解决了我在新范围中的大小写敏感问题。我应该将“def”放在哪里?正在筛选的项目的控制器?对于我的新手方式,请提前道歉:)不用担心。它应该和你的作用域在同一个模型中。您可以在控制器内进行呼叫。您应该避免将此方法放在控制器中,因为您通常需要精简控制器(以及胖模型),但更多的原因是关于模型的内容应该保留在模型中。另外,需要明确的是,如果修改的范围版本起作用,您不需要使用
def
方法。方法形式是一种替代形式,而不是附加形式。这使我得到了我要查找的结果
范围:按名称搜索,->(名称){where(arel_table[:name]。matches('%'+name+'%'))}