У вас есть ответ в самом вопросе. Почему бы вам просто не использовать javascript, чтобы скрыть эти две части и вызывать их при нажатии на соответствующую вкладку? Для этого вам совсем не нужен ajax:)
Поскольку вы не упомянули используемую вами библиотеку javascript, я дам общее решение с использованием jquery:
Также вам не нужно добавлять # к идентификаторам вашего соответствующего div. Измените это на это:
<ul class="tabs">
<li id="dogs">Dogs</li>
<li id="cats">Cats</li>
</ul>
<div id="dogs" class="subTabs">
<%= render @dogs %><hr />
</div>
<div id="cats" class="subTabs">
<%= render @cats %><hr />
</div>
$(document).ready(function() {
$('.subTabs').hide(); //Hide the subTabs as soon as the DOM is loaded.
$('li').live('click', function(e) {
$('.subTabs').hide(); //Calling this again so as to remove an already loaded
tab, if any. You can refactor this part to make it
even simpler.
$('body').find('.subTabs').attr('id',$(this).attr('id')).show();
//This finds the ".subTabs" whose id is the same as the "li" id that
was clicked and shows it. Ofcourse, even this can be made even more
compact had i known your entire DOM structure.
});
});
Edit:
Вы также должны убедиться, что вы стилизуете его с помощью CSS, чтобы он выглядел больше как вкладки, если вы еще этого не сделали. :)
Надеюсь, это поможет. :)