Helper para DataTables
Vasculhando pelo site da jQuery encontrei este pluguin DataTables que me chamou a atenção e então procurei aplicar o mesmo na parte administrativa no meu blog. Inicialmente criei um partial para instanciar o plugin javascript com o seguinte código:
<% content_for :head do -%> <% javascript_tag do -%> $(function(){ $("#table").dataTable( { "aaSorting": <%= sort rescue '[[ 0, "asc" ]]' %>, "sPaginationType": "full_numbers", "bStateSave": true, "bInfo": false, "iDisplayLength": 50, "oLanguage": { "sUrl": "/javascripts/plugins/data_tables_<%= I18n.locale %>.js" } }).css("width", "auto"); }); <% end -%> <% end -%>
Então eu passava para este partial uma variável local com o nome de sort a fim se alterar qual deveria ser a coluna inicial para ordenar. Porém surgiu a necessidade de passar mais parâmetros, foi então que percebi o quanto o código estava sujo e nada funcional. Com a idéia de melhorar o mesmo gastei pouco mais de 2 minutos e criei um helper para fazer isto de uma forma muito mais elegante. Veja o código abaixo:
def data_table(options={}) options.reverse_merge! "sPaginationType" => "full_numbers", "bStateSave" => true, "bInfo" => false, "iDisplayLength" => "100", "aaSorting" => [[ 0, "asc"]], "oLanguage" => {"sUrl" => "/javascripts/plugins/data_tables_#{I18n.locale}.js"} content_for(:head) do javascript_tag do "$(function(){oTable = $('#table').dataTable(#{options.to_json}).css('width', 'auto');});" end end end
Como você pode ver criei uma configuração padrão e você pode alterar qualquer uma delas passando um hash como parâmetro para a chamado do método. Veja o exemplo a seguir:
<% data_table({"aaSorting" => [[ 3, "desc"]], "bInfo" => true}) %>Com um pouco de atenção e um pouco de tempo você pode melhorar a qualidade do seu código assim como eu melhorei a minha. Afinal além de mais elegante o código ficou fácil de entender, de manter e principalmente com uma melhor performance.