当我公司的银行账户收到付款时,我们的应用程序会触发一个webhook,提供与付款相关的数据,包括付款标签.

此标签是由客户端编写的字符串,在不同的实例之间可能会有很大差异.我们通常提供要包括在标签中的对客户的引用,以便我们能够识别它.引用模式符合以下正则表达式:/\A[a-zA-Z]{2,5}-?\d{4}-?\d{2}-?\d{4}\z/.例如:"ABCDE-2023-01-0001""ab-2023-01-0001"等.

另外,我还有一台Invoice型的,有两根柱子:numbermoneyin_key.number值通常遵循以下格式:ABCDE-2023-01-0001moneyin_key值相同,但没有连字符,如"ABCDE2023010001".

我想创建一个范围来检索与客户提供的标签相关的所有发票.正如前面提到的,标签可以有很大的不同,但这里有一个例子:"VIR. O/ JUMBO VISMA MOTIF: EDP2023100001"我的范围应该 struct 如下:

scope :related_to_payment_label, -> (label) { do_something_here }

我try 了几种方法,但都没有成功.示例:

scope :related_to_payment_label, -> (label) {
  where("number ILIKE :label OR moneyin_key ILIKE :label", label: "%#{label}%")
}

有什么主意吗?

推荐答案

您可以在您的作用域中使用自定义SQL查询.您需要从付款标签中提取参考模式,然后使用它来搜索相关发票.以下是你如何做到这一点:

scope :related_to_payment_label, -> (label) {
  reference = label.match(/\b[a-zA-Z]{2,5}-?\d{4}-?\d{2}-?\d{4}\b/).to_s

  where("number = :reference OR moneyin_key = :reference", reference: reference)
}

Ruby-on-rails相关问答推荐

Rails 7通过引擎将方法自动加载到控制器中的方法

RubyOnRail在测试环境中启动失败

NoMethodError:Puma::Events:Class 的未定义方法字符串

组合 active_record 模型并按共享属性排序

Rails:保存子对象时更新父对象

如何获取 Ruby on Rails 生成的表单元素 id 以供 JavaScript 参考?

为什么使用 HTTP PUT 和 DELETE 方法而不是 POST?

FactoryGirl + Faker - 为数据库种子数据中的每个对象生成相同的数据

simple_forms 自定义数据属性

禁用 RVM 或使用没有 RVM 安装的 Ruby?

Rails 助手应该假设实例变量存在还是应该将它们作为参数接收?

DateTime.now 还是 Time.now?

Rails 文章助手 - a 或 an

未选中时,如何使 check_box_tag 发布false或0参数?

Rails:如何在表单的必填字段上禁用星号?

使用 Rails 时,在 Ruby 中处理常量的最佳方法是什么?

在范围内传递参数

如何在 Rails 中设置路由的默认格式?

ArgumentError:ApplicationController 的副本已从模块树中删除,但仍处于活动状态

简单的 rails rake 任务拒绝运行并出现错误不知道如何构建任务,为什么?