Mucho más limpio y sencillo. En las vistas solemos tener un partial que pinta las pestañas. Aquí podemos poner algo como:
<% tabs_tag(:builder => MyTabBuilder) do |tab| %>
<% if logged_in? %>
<%= tab.home I18n.t('tabs.home'), member_dashboard_path %> <%= tab.members I18n.t('tabs.members'), member_profiles_path %>
<% else %>
<%= tab.home I18n.t('tabs.home'), root_path %>
<%= tab.members I18n.t('tabs.members'), profiles_path %>
<% end %>
<% end %>
<% if logged_in? %>
<%= tab.home I18n.t('tabs.home'), member_dashboard_path %> <%= tab.members I18n.t('tabs.members'), member_profiles_path %>
<% else %>
<%= tab.home I18n.t('tabs.home'), root_path %>
<%= tab.members I18n.t('tabs.members'), profiles_path %>
<% end %>
<% end %>
Si quieres personalizar la forma de pintar las pestañas, puedes crear tu propio Builder en el directorio lib, por ejemplo:
class MyTabBuilder < TabsOnRails::Tabs::Builder
def tab_for(tab, name, options)
cls = (current_tab?(tab) ? 'selected' : '')
@context.content_tag(:li) do
@context.link_to(name, options, :class => cls)
end
end
end
Ahora en los controladores, eliges la pestaña que quieres seleccionar, pudiendo incluir lógica o diferenciar por action:
class ProfilesController < ApplicationController
set_tab :home
set_tab :members, :if => :my_profile?
set_tab :home
set_tab :members, :if => :my_profile?
set_tab :posts, :only => %w(list edit)
...
private
def my_profile?
!params[:id].blank? && params[:id].to_i == current_user.id
end
end