如何在 ActiveRecord 中执行“更新...”?

Sch*_*ern 6 ruby-on-rails subquery rails-activerecord ruby-on-rails-6

我想update ... from使用 CTE 进行 , 或更新,但使用 ActiveRecord。理想情况下,这样我就可以利用in_batches.

例如,人有很多东西,我想缓存他们的第一个东西。我想它会像这样工作。

Person
  .in_batches
  .from(
    Thing.select(
      :id, 
      :people_id, 
      "rank() over (partition by people_id order by created_at asc) as thing_rank"
    )
   )
   .where(
     "things.thing_rank": 1,
     "people.id": :people_id
   )
  .update_all(cached_thing_id: "things.id")
Run Code Online (Sandbox Code Playgroud)

但我想不出任何有效的组合。

in_batches或者,有没有办法在手动编写 SQL 时使用?我不喜欢子查询方法,CTE 或临时视图就可以了。