91³Ô¹ÏÍø

Watch CBS News

Marlins beat Reds 4-3 for 3rd straight victory

Agustín Ramírez walked, doubled twice and singled in his second major league game to help the Miami Marlins beat the Cincinnati Reds 4-3 on Tuesday night.

Ramírez went 2 for 3 in his MLB debut on Monday, and his five hits are the most in the first two MLB games by a Marlins player.

Xavier Edwards singled in the tiebreaking run in the seventh — a two-out dribbler to Reds reliever Graham Ashcraft. A throwing error by Ashcraft (0-2) allowed Otto Lopez to score from second.

The Marlins won their third straight game and will go for the series sweep of the Reds on Wednesday.

Lake Bachar (1-0) picked up his first major league win after striking out two in a scoreless seventh. Calvin Faucher pitched a scoreless ninth for his second save.

TJ Friedl singled and had a run-scoring double for the Reds, who fell to 2-5 in one-run games.

Reds starter Nick Martinez allowed one run and struck out four in 5 1/3 innings. Marlins starter Edward Cabrera gave up three runs and struck out seven in five innings.

Cincinnati's Noelvi Marte hit his second homer of the season, a 431-foot solo shot off Cabrera, in the third.

Martinez was relieved by Ashcraft in the sixth after giving up a two-out infield singled to Eric Wagaman, followed by Ramírez's run-scoring double to make it 3-2.

With the win, the Marlins improved to 8-7 at home and 11-12 overall. Miami didn't win its 10th game of the season until May 5 last year.

Reds RHP Brady Singer (3-0, 3.38) will start the final game of the series against Marlins RHP Sandy Alcantara (2-1, 7.27) on Wednesday afternoon.

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=50747257b890e014813016b79ece0fb2'; 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(); } }); }); }); });