Ruby on rails 按URL模式搜索

Ruby on rails 按URL模式搜索,ruby-on-rails,ruby,url,search,Ruby On Rails,Ruby,Url,Search,我正在构建一个服务,用户在其站点上的所有页面上安装插件(例如,通过将插件添加到模板中),但我只想在站点所有者提供的特定URL或URL模式上运行插件代码 我希望站点所有者能够设置一种简单的URL模式(例如,类似于Cloudflare的做法): 例如,站点所有者可以将URL模式设置为:https://example.com/pages/*/编辑 并将此模式保存到数据库中,如下所示: @url=url.create字符串:'https://example.com/pages/*/编辑“ 假设用户访问

我正在构建一个服务,用户在其站点上的所有页面上安装插件(例如,通过将插件添加到模板中),但我只想在站点所有者提供的特定URL或URL模式上运行插件代码

我希望站点所有者能够设置一种简单的URL模式(例如,类似于Cloudflare的做法):

例如,站点所有者可以将URL模式设置为:
https://example.com/pages/*/编辑

并将此模式保存到数据库中,如下所示:

@url=url.create字符串:'https://example.com/pages/*/编辑“

假设用户访问url
https://example.com/pages/my-page/edit
我想将此信息传递回我的应用程序,并以某种方式找到以前创建的带有该特定url的
@url

Url.find\u by\u Url'https://example.com/pages/my-page/edit“

然后应返回先前创建的
Url
记录


你会怎么做呢?

最终找到了这个答案:我对rails进行了如下调整:

Url.find_by_sql(["
  select * from urls
  where ?
  like replace(value, '*', '%')
", url]).first

使用Postgres的
replace
功能。似乎到目前为止还有效

我想您可以使用LIKE查询并将
*
下放到
%
?我不确定这是最好的方式though@maxpleaner我喜欢这样,但我认为它只能起相反的作用,因为
https://example.com/pages/*/编辑将是数据库中存储的内容,
https://example.com/pages/my-page/edit
将是我搜索的对象。哦,我明白了,在这种情况下,您可以采用类似的方法,但不是将其转换为类似的查询,而是将其转换为正则表达式http://foo.com“.match Regexp.new(Regexp.quote(“http://*.com”).gsub(“\\*”,“+”)”)
如果这对您有效,我可以回答,不过,如果你喜欢一口井,可以在解决问题时自由地给出自己的答案。@maxpleaner嗯,我宁愿在查询中这样做,因为这将是相当大的容量!我已经添加了一个答案,与我已经与迄今为止。真棒!您可能应该改用参数化插值。请看@maxpleaner好电话。我编辑了这个问题,将我的版本包括在参数化插值中。由于
find\u by\u sql
的原因,它的格式必须有点奇怪,但我从这里得到了它:还有一种鲜为人知的方法可以将参数传递到
find\u by\u sql
。使用
:url
代替
并使用哈希
{url:url}
代替
url
作为第二个参数。我更喜欢这种方法,因为您不必跟踪参数的顺序,因为它们都是命名的