この:
update orgs
set users_count = coalesce(users_count, 0)
+ (select count(*) from org_users where org_id = #{org.id})
where id = #{org.id}
は今、あなたはOrg.find(:all).each
でそれをラップしました:一歩をアンロール
update orgs
set users_count = coalesce(users_count, 0) + #{org.users.length}
where id = #{org.id}
:
Org.update_counters org.id, :users_count => org.users.length
は基本的にこれを行います私たちはただSQLに反復を押して#{org.id}
に対処する必要があります:あなたは本当にがusers_count
値ではなくインクリメントを設定することを意味している場合
update orgs o
set users_count = coalesce(users_count, 0)
+ (select count(*) from org_users ou where ou.org_id = o.id)
をそしてそれら:
update orgs o
set users_count = (select count(*) from org_users ou where ou.org_id = o.id)