我可以编写一个activerecord作用域,在查询时将结果包装在一个块中吗?

我们的 rails 应用程序有一个主数据库和一个副本数据库。我们已经定义了一个接受块的方法,并且在块内部时,将对副本进行查询,如下所示:

on_replica do
  @my_things = MyModel.where(my_attr: "my value").to_a
end

这在大多数情况下效果很好,但如果您实际上不在块中执行查询,则它不起作用:

on_replica do
  @my_things = MyModel.where(my_attr: "my value")
end

# this will run its query against the primary DB
@my_things.to_a 

我真的很想能够定义一个范围(或类似范围的东西),以便任何发生在方法链中该点之后的查询都会针对副本发生:

@my_things = MyModel.where(my_attr: "my value").eventually_on_replica

# this runs its query against the replica DB:
@my_things.to_a

是否可以eventually_on_replica使用现有on_replica方法定义一种以这种方式工作的方法?如果MyModel.eventually_on_replica.where(my_attr: "my value")工作也加分。

以上是我可以编写一个activerecord作用域,在查询时将结果包装在一个块中吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>