91³Ô¹ÏÍø

Watch CBS News

Cubs take series 2-1 against Rays with 4-3 win at Wrigley Field

Nico Hoerner had three RBIs, including a go-ahead, two-run double in the seventh inning that sparked the Chicago Cubs over the fading the Tampa Bay Rays 4-3 on Sunday.

Ian Happ homered and Michael Busch doubled for the Cubs, who have won four of five and lead for the top NL wild card.

Tampa Bay has lost seven of nine, dropping to 73-76.

Junior Caminero, the Rays' 22-year-old emerging star, hit his 44th homer.

Javier Assad (3-1) scattered two hits in 2 1/3 scoreless innings for Chicago and Andrew Kittredge struck out Junior Caminero with a runner on first for his fifth save in six chances..

Ian Happ cut Chicago's deficit to 3-2 in the sixth with his 22nd homer.

Hoerner had a two-out double off Edwin Uceta (9-3) for a 4-3 lead in the sixth after Willi Castro and Matt Shaw singled.

Yandy Díaz and Caminero hit back-to-back home runs for the Rays starting the game off Shota Imanaga, who allowed three runs and seven hits in five innings with nine strikeouts and no walks.

Christopher Morel, who played for the Cubs from 2022 to 2024, exited in the sixth with an abdominal bruise after he was hit by a foul ball.

Key moment

Tampa Bay lost a run in the seventh that would have increased its lead to 4-2. With runners at the corners, Jake Mangum hit a ground ball to Hoerner at second, who threw to shortstop Dansby Swanson for a forceout as Mangum beat the return throw to first and Caminero crossed the plate. A video review determined Lowe violated the slide rule by bumping into Swanson, giving the Cubs an inning-ending double play.

Key stat

Hoerner is batting .299, second in the NL to Philadelphia's Trea Turner (.305) among qualified hitters.

Up next

Rays: Tampa Bay opens a series Monday at Tampa Bay, which starts RHP Trey Yesavage in his major league debut.

Cubs: RHP Jameson Taillon (9-6, 4.15 ERA) starts Monday at the Pirates and RHP Braxton Ashcraft (4-2, 2.47).

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=fd53910ecf4604072044ab7c46d9b028'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });