gpt4 book ai didi

ruby-on-rails - 在 Rails 模型中进行正则表达式搜索的惯用方法?

转载 作者:行者123 更新时间:2023-12-04 20:01:45 29 4
gpt4 key购买 nike

在我的 Rails Controller 中,我想对我的模型进行正则表达式搜索。我的谷歌搜索似乎表明我必须写这样的东西:

Model.find( :all, :condition => ["field REGEXP '?' " , regex_str] )

这相当讨厌,因为它暗示了 MySQL 语法(我使用的是 Postgres)。

有没有更简洁的方法来强制 rails(在我的例子中是 4 个)在字段上进行正则表达式搜索?

我也更喜欢使用 where(),因为它允许我将强参数(哈希)直接映射到查询。所以我想要的是:

Model.where( params, :match_by => { 'field': '~' } )

这会松散地翻译成类似的东西(如果 params['field'] = 'regex_str')

select * from models where field ~ regex_str

最佳答案

不幸的是,没有惯用的方法可以做到这一点。 ActiveRecord 中没有对正则表达式的内置支持。除非每个数据库适配器都有特定于数据库的实现,否则不可能高效地执行,而且并非所有数据库都支持正则表达式匹配。支持的语法并不都支持相同的语法(例如,Postgres 没有与 Ruby 的 Regexp 类相同的正则表达式语法)。

正如您在问题中指出的那样,您必须使用 SQL 自己动手。但是,还有其他选择。

有关特定于 Postgres 的解决方案,请查看 pg_search ,它使用 Postgres 的全文搜索功能。这是非常快的并且支持模糊搜索和一些模式匹配。

elasticsearch需要更多的设置,但速度非常快,有一些不错的 gem 让您的生活更轻松。这是一个 RailsCasts情节介绍它。它需要运行一个单独的服务器,但上手并不难,而且功能强大。仍然没有正则表达式,但值得一看。

如果您只是针对单个字段执行一次性正则表达式搜索,SQL 可能是最佳选择。

关于ruby-on-rails - 在 Rails 模型中进行正则表达式搜索的惯用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16094991/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com