The counter cache method can be used to store the number of child items with ease.
My scheme of things has multiple users adding entries into the child table. Will the active record handle this? Will the number be updated accordingly if more than one user simultaneously add child entries?
No, the counter cache can be set incorrectly if children are added
concurrently. To be sure the counter_cache is updated correctly,
code like:
Parent.transaction do
@parent = Parent.find( ..., :from => 'parents for update' )
@parent.children.create( params[:child] )
end
No, the counter cache can be set incorrectly if children are added
concurrently. To be sure the counter_cache is updated correctly,
code like:
Parent.transaction do
@parent = Parent.find( ..., :from => 'parents for update' )
@parent.children.create( params[:child] )
end
That said, as long as you wrap the child creation in a transaction
(if Rails has not already done so internally, as is the case
for creation via the parent association), you're pretty right
because counter cache updates are done as single-statement updates
in after_create.
It depends on whether you just want your child count to stay correct,
not caring if you read a slightly stale count on occasion, or whether
you want the correct count every time you read it.