L'aggiunta di un elemento alla raccolta lo salva immediatamente (a meno che l'utente non sia stato salvato). La chiamata al salvataggio crea la propria transazione e questo è ciò che viene ripristinato, non la transazione in cui viene salvato l'elemento
Potresti forzare tutto nella stessa transazione creandone una esplicitamente.
begin
User.transaction do
@user.items << item
@user.save!
render :json => {}, :status => :ok
end
rescue ActiveRecord::RecordInvalid
render :json => {:status => :error, :errors => item.errors}, :status => :bad_request
end