gpt4 book ai didi

ruby-on-rails - 如何在 Rails 5 中添加自定义谓词生成器?

转载 作者:行者123 更新时间:2023-12-02 03:08:57 25 4
gpt4 key购买 nike

在 Rails 4 中,如果我有一个 ArrayLikeClass 类,并且我想在像 Model.where(id: instance_of_array_like_class) 这样的查询中使用它的对象,我可以这样做所以通过注册谓词构建器:

ActiveRecord::PredicateBuilder.register_handler(ArrayLikeClass, ActiveRecord::PredicateBuilder::ArrayHandler.new)

之后 ArrayLikeClass 的实例在 where 查询中使用时的行为与 Array 的实例相同。

但是,在 Rails 5 中,API 发生了变化,ActiveRecord::PredicateBuilder::ArrayHandler.new 现在需要一个 ActiveRecord::PredicateBuilder 的实例。此外,register_handler 现在是 ActiveRecord::PredicateBuilder 中的一个实例方法

那么,如何在 Rails 5 中为自定义类注册谓词构建器处理程序?

最佳答案

虽然这是一个老问题,但我遇到了类似的问题,但我也想使用自定义处理程序。一种是您可以通过在模型中的 predicate_builder 方法中注册一个处理程序来做到这一点。您可以在基本模型、模块或其他方式中执行此操作,但是如果您在基本模型中的哪个位置执行此操作,它将看起来像这样:

class ApplicationRecord < ActiveRecord::Base
...
def self.predicate_builder
return @local_predicate_builder if @local_predicate_builder
@local_predicate_builder = super
@local_predicate_builder.register_handler(ArrayLikeClass, ArrayLikeClassHandler.new(@local_predicate_builder))
@local_predicate_builder
end
...
end

虽然这使用自定义处理程序类,但您可以尝试将 ArrayLikeClassHandler 更改为 ActiveRecord::PredicateBuilder::ArrayHandler 但我只尝试使用自定义处理程序。

这是 ActiveRecord 中方法的链接 link .

关于ruby-on-rails - 如何在 Rails 5 中添加自定义谓词生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40891093/

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