Michelada Ribs with Hibiscus BBQ Sauce
5-6
servings
Main
Course
Print Recipe
Ingredients
Directions
Ingredients
4 lb
pork baby back ribs (avoid spare ribs)
Jump
4 tbsp
steak seasoning
Jump
12 oz
pilsner beer, such as Modelo Especial or Corona
Jump
½ c
Clamato juice
Jump
¼ c
Worcestershire sauce
Jump
1 tbsp
reduced-sodium soy sauce
Jump
1 tsp
sugar
Jump
2 ½ c
Hibiscus BBQ Sauce
Jump
Hibiscus BBQ Sauce (Makes about 2 1/2 cups)
1 c
dried hibiscus flowers
Jump
2
ancho chiles, seeded
Jump
1
(6 ounce/170 g) can tomato paste
Jump
c
packed dark brown sugar
Jump
2 tbsp
Worcestershire sauce
Jump
2 tsp
Diamond Crystal kosher salt, plus more to taste
Jump
1 ½ tsp
smoked paprika
Jump
1 tsp
garlic powder
Jump
1 tsp
onion powder
Jump
ESTEBAN’S STEAK SEASONING (Makes ¾ cup)
2 lg
guajillos (about 5 ½ inches), stemmed and seeded
Jump
1 tbsp
black peppercorns
Jump
1 ½ tsp
coriander seeds
Jump
1 tsp
cumin seeds
Jump
3 ½ tbsp
Diamond Crystal kosher salt
Jump
3 tbsp
dehydrated minced garlic
Jump
3 tbsp
dehydrated minced onion
Jump

Ribs are one of the dishes that my parents ask me to make the most whenever I host family dinners. My parents loved going to BBQ joints for birthdays, and after spending hundreds year after year on dry mac and cheese and ribs with very little to no meat, I decided to make everything myself for half the cost. I like to braise the ribs in a mixture reminiscent of the flavors of a michelada—beer, Clamato, Worcestershire sauce—and braising them makes them really juicy and tender so the cooked meat just falls off the bone. I love deviled eggs, so along with the ribs I like to serve a creamy deviled egg macaroni salad, the cheesiest rajas con mac and cheese (mac and cheese with diced jalapeño and poblano chiles), and sweet and buttery corn bread muffins made with a mixture of cornmeal and masa harina to enhance the flavor of the corn.Recipes for those favorites follow so you can easily make your own BBQ-style dinner at home!

Directions

HIBISCUS BBQ SAUCE (Makes about 2 ½ c cups)
  1. In a medium saucepan, bring 3½ cups (830 ml) water to a boil over high heat. Remove from the heat and add the hibiscus and anchos. Set aside for at least 20 minutes to let the chiles soften.
  2. With a slotted spoon, remove and discard the hibiscus, then add the chiles and the soaking liquid to a blender and blend on high speed for 30 seconds. Once the chile mixture is smooth and completely blended, pour the mixture through a fine-mesh sieve back into the saucepan it was steeping in, pressing on any solids left behind to make sure you get out as much flavor as possible.
  3. Whisk the tomato paste, brown sugar, Worcestershire sauce, salt, smoked paprika, garlic powder, and onion powder into the pan and bring the mixture to a simmer over medium-low heat. Cook, stirring occasionally, until thickened enough to coat the back of a spoon, about 30 minutes. Adjust the salt to taste.
  4. Let the mixture come to room temperature, then transfer to a sealed container. You can use this right away or store in the fridge sealed tightly, where it will keep for up to 2 weeks—the flavors develop a little more if made a day ahead.
ESTEBAN’S STEAK SEASONING (Makes ¾ cup)
  1. Preheat the oven to 275°F (135°C) then place the peppers on a baking sheet and bake for 10 minutes; set the peppers aside to cool completely.
  2. Once the peppers have cooled, place them in a spice grinder along with the peppercorns, coriander, and cumin and pulse until everything is roughly ground up, but not fine.
  3. Pour the coarse mixture into a small mason jar, then add the salt, garlic, and onion. Place the lid on and shake to combine. This spice mix can be stored in a cool, dry place for up to 3 months.
Ribs
  1. Position racks in the top and bottom thirds of the oven and preheat the oven to 250°F (120°C).
  2. Break the ribs down into four 1-pound (455 g) racks to ensure they cook evenly. Place a large piece of foil on top of a baking sheet without tucking in the edges. Place one of the slabs of ribs on the foil, sprinkle on 1 tablespoon of the steak seasoning, and use your hands to pat it into the meat. Seal up the ribs in an individual foil packet, leaving one end open to pour in the braising liquid. Repeat this process with the remaining slabs of ribs.
  3. In a large measuring cup, whisk together the beer, Clamato juice, Worcestershire, soy sauce, and sugar to make a braising liquid.
  4. Dividing evenly, pour the braising liquid into the open end of each one of the rib packets, then seal them completely. Arrange the ribs on two baking sheets.
  5. Braise the ribs in the oven for 2 hours 45 minutes, switching the baking sheets from rack to rack at the 1½-hour mark.
  6. Remove the baking sheets from the oven and turn the broiler to high. Drain the braising liquid, discard the foil, and place the ribs back onto your pan. (If your broiler is small, you’ll have to slice your racks in half and work in batches.) Brush some BBQ sauce onto both sides of the ribs and broil until the sauce caramelizes, about 4 minutes. Remove from the oven, brush on more of the BBQ sauce, and broil for another 4 minutes for the sauce to finish caramelizing, then remove and brush on a generous third coat. Repeat with the remaining slabs of ribs.
  7. To serve: Let the ribs cool for a few minutes, then cut into individual-sized portions and serve with extra BBQ sauce on the side. Accompany the ribs with muffins, macaroni salad, and mac and cheese.

Reprinted with permission from Chicano Eats by Esteban Castillo.

[email_signup id="3"]
<div class="email-subscribe exp-subscribe subscribe"> <div class="alert alert-success exp-success ga-etembed-success" style="display:none;"> Great! You've signed up successfully! </div> <div class="alert alert-danger exp-error" style="display:none;"> We are experiencing an error, please try again. </div> <form name="subscribe" id="email-signup" class="email-signup-form" action="https://tastecooking.com/wp-admin/admin-ajax.php" method="POST" target="_top" data-event-assigned="false"> <fieldset class="form-group form-inline email-submit-group"> <label for="email-address" class="sr-only">Email Address</label> <input id="email-newsletter" type="email" placeholder="your@email.com" class="email-newsletter text email form-control" name="email" value=""> <button type="submit" value="Subscribe" name="subscribe" class="btn btn-primary email-submit-btn ga-etembed-success"> <i class="fa fa-envelope"></i> Subscribe </button> </fieldset> <small class="exp-small terms" style=""> By clicking Subscribe, I acknowledge that I have read and agree to the Penguin Random House <a href="http://www.penguinrandomhouse.com/privacy/" target="_blank">Privacy Policy</a> and <a href="http://www.penguinrandomhouse.com/terms/" target="_blank">Terms of Use</a> and agree to receive news and updates from TASTE and Penguin Random House. </small> <fieldset class="field-group checkboxes" style="display:none"> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50501,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook General</strong></span> </label> </div> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50502,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook Promo</strong></span> </label> </div> </fieldset><!-- /.checkboxes --> <input type="hidden" name="data_acq_code" value="TASTE_POPUP_STATIC_ONGOING" /> <input type="hidden" name="data_programs" value="50501|505,50502|505" /> <input type="hidden" name="form_id" value="3" /> <input type="hidden" name="partner" value="" /> <input type="hidden" name="action" value="crown_email_signup_submit" /> <input type="hidden" name="ref_url" value="" /> </form> </div> <script> jQuery(document).ready(function () { var unassigned_forms; setInterval( function() { //Check for unassigned forms var forms = jQuery( '.email-signup-form' ); unassigned_forms = false; forms.each( function( index ) { if ( jQuery( this ).attr( 'data-event-assigned' ) === 'false' ) { unassigned_forms = true; } }); if ( unassigned_forms ) { forms.off( 'submit' ).on( 'submit', function ( e ) { forms.attr( 'data-event-assigned', 'true' ); e.preventDefault(); // Basic email validation var email = jQuery(e.target).find('.email-newsletter').val(), valid_email = false, groupEl = jQuery(e.target).closest('.email-subscribe'); if ( !!email && typeof(email) === "string" ) { var email_array = email.split('@'); if ( email_array.length === 2 ) { if ( email_array[1].split('.').length > 1 ) { valid_email = true; } } } if ( valid_email ) { jQuery('.alert-danger').hide(); // Show loading gif groupEl.find('.email-signup-form').hide(); groupEl.find('.email-submit-loading').show(); // Populate ref_url jQuery(this).find('input[name="ref_url"]').val(window.location.href); // Generate Payload var payload = jQuery(this).serializeArray(); jQuery.ajax({ url: jQuery(this).attr('action'), type: 'POST', data: payload, success: function (data) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display success msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-success').show(); jQuery(e.target).parent().find('#downloadbtn').show(); }, fail: function (err) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display failure msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-danger').show(); } }); } else { groupEl.find('.alert-danger').html('Please enter a valid email address.').show(); } }); forms.off( 'keypress' ).on( 'keypress', function ( e ) { if ( e.which === 13 ) { e.preventDefault(); jQuery( this ).submit(); } }); } }, 100); }); </script>
[email_signup id="3"]
<div class="email-subscribe exp-subscribe subscribe"> <div class="alert alert-success exp-success ga-etembed-success" style="display:none;"> Great! You've signed up successfully! </div> <div class="alert alert-danger exp-error" style="display:none;"> We are experiencing an error, please try again. </div> <form name="subscribe" id="email-signup" class="email-signup-form" action="https://tastecooking.com/wp-admin/admin-ajax.php" method="POST" target="_top" data-event-assigned="false"> <fieldset class="form-group form-inline email-submit-group"> <label for="email-address" class="sr-only">Email Address</label> <input id="email-newsletter" type="email" placeholder="your@email.com" class="email-newsletter text email form-control" name="email" value=""> <button type="submit" value="Subscribe" name="subscribe" class="btn btn-primary email-submit-btn ga-etembed-success"> <i class="fa fa-envelope"></i> Subscribe </button> </fieldset> <small class="exp-small terms" style=""> By clicking Subscribe, I acknowledge that I have read and agree to the Penguin Random House <a href="http://www.penguinrandomhouse.com/privacy/" target="_blank">Privacy Policy</a> and <a href="http://www.penguinrandomhouse.com/terms/" target="_blank">Terms of Use</a> and agree to receive news and updates from TASTE and Penguin Random House. </small> <fieldset class="field-group checkboxes" style="display:none"> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50501,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook General</strong></span> </label> </div> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50502,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook Promo</strong></span> </label> </div> </fieldset><!-- /.checkboxes --> <input type="hidden" name="data_acq_code" value="TASTE_POPUP_STATIC_ONGOING" /> <input type="hidden" name="data_programs" value="50501|505,50502|505" /> <input type="hidden" name="form_id" value="3" /> <input type="hidden" name="partner" value="" /> <input type="hidden" name="action" value="crown_email_signup_submit" /> <input type="hidden" name="ref_url" value="" /> </form> </div> <script> jQuery(document).ready(function () { var unassigned_forms; setInterval( function() { //Check for unassigned forms var forms = jQuery( '.email-signup-form' ); unassigned_forms = false; forms.each( function( index ) { if ( jQuery( this ).attr( 'data-event-assigned' ) === 'false' ) { unassigned_forms = true; } }); if ( unassigned_forms ) { forms.off( 'submit' ).on( 'submit', function ( e ) { forms.attr( 'data-event-assigned', 'true' ); e.preventDefault(); // Basic email validation var email = jQuery(e.target).find('.email-newsletter').val(), valid_email = false, groupEl = jQuery(e.target).closest('.email-subscribe'); if ( !!email && typeof(email) === "string" ) { var email_array = email.split('@'); if ( email_array.length === 2 ) { if ( email_array[1].split('.').length > 1 ) { valid_email = true; } } } if ( valid_email ) { jQuery('.alert-danger').hide(); // Show loading gif groupEl.find('.email-signup-form').hide(); groupEl.find('.email-submit-loading').show(); // Populate ref_url jQuery(this).find('input[name="ref_url"]').val(window.location.href); // Generate Payload var payload = jQuery(this).serializeArray(); jQuery.ajax({ url: jQuery(this).attr('action'), type: 'POST', data: payload, success: function (data) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display success msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-success').show(); jQuery(e.target).parent().find('#downloadbtn').show(); }, fail: function (err) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display failure msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-danger').show(); } }); } else { groupEl.find('.alert-danger').html('Please enter a valid email address.').show(); } }); forms.off( 'keypress' ).on( 'keypress', function ( e ) { if ( e.which === 13 ) { e.preventDefault(); jQuery( this ).submit(); } }); } }, 100); }); </script>