【发布时间】:2016-11-30 14:37:10
【问题描述】:
在 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 中为自定义类注册谓词构建器处理程序?
【问题讨论】:
-
这github.com/rails/rails/blob/… 是你要找的吗?
-
@fanta 有点是的,但我不想提及表格/模型,而是想让所有模型都可以使用它。此外,我更愿意重用现有的
ActiveRecord::PredicateBuilder::ArrayHandler.new,但它需要一个ActiveRecord::PredicateBuilder的实例,我不确定在哪里可以找到。 -
好吧,我觉得现在不可能了,好像这里改了github.com/rails/rails/commit/…,如果你看到了,方法现在是实例方法而不是类方法。检查测试。
标签: ruby-on-rails activerecord ruby-on-rails-5