Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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 如何在Postgres数据库中存储正则表达式或搜索词,并在Rails查询中进行计算?_Ruby On Rails_Ruby_Regex_Postgresql_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 如何在Postgres数据库中存储正则表达式或搜索词,并在Rails查询中进行计算?

Ruby on rails 如何在Postgres数据库中存储正则表达式或搜索词,并在Rails查询中进行计算?,ruby-on-rails,ruby,regex,postgresql,ruby-on-rails-4,Ruby On Rails,Ruby,Regex,Postgresql,Ruby On Rails 4,我在Rails应用程序中遇到DB查询问题。我想存储各种搜索词(比如100个),然后根据一个值进行动态计算。我能找到的Postgres中所有类似于或~(regex)的示例都在查询中使用固定字符串,而我想从一行中查找查询 例如: Table: Post column term varchar(256) (plus regular id, Rails stuff etc) input = "Foo bar" Post.where("term ~* ?", input) 所以term是VARCHA

我在Rails应用程序中遇到DB查询问题。我想存储各种搜索词(比如100个),然后根据一个值进行动态计算。我能找到的Postgres中所有类似于或~(regex)的示例都在查询中使用固定字符串,而我想从一行中查找查询

例如:

Table: Post 
column term varchar(256)
(plus regular id, Rails stuff etc)

input = "Foo bar"
Post.where("term ~* ?", input)
所以term是VARCHAR列名,包含至少一行的数据,其值为:

^foo*$
除非我输入一个精确的匹配项(例如术语中的“Foo-bar”),否则这永远不会返回结果

我还想理想地使用以下表达式

(^foo.*$|^second.*$) 
i、 e.还有多个搜索词,因此它将与“Foo-Bar”或“search-Example”匹配

我认为这与Ruby或ActiveRecord剥离某些内容有关?或者我走错了方向,不能将regex或类似的用于这样的行数据值


关于如何做到这一点的其他建议也很受欢迎。

Postgres正则表达式匹配运算符的正则表达式位于右侧,字符串位于左侧。参见示例:

但是在您的查询中,您将
term
视为字符串,“Foo bar”视为正则表达式(您已经交换了它们)。这就是为什么唯一匹配的术语是精确匹配。尝试:

Post.where("? ~* term", input)

我还希望理想情况下使用类似
的表达式,如果您有一组固定的术语,请使用三元树正则表达式生成器。See查找单词所需的步骤不超过5步。