Patch de correção do will_paginate para o acts_as_fulltextable
Encontrei um erro ao paginar os resultados de buscas com o plugin acts_as_fulltextable utilizando will_paginate. O acts_as_fulltextable passa uma série de opções para que o método paginate execute a query com MATCH()…AGAINST dentro da chave :SELECT, como foi explicado no post anterior. O Will_paginate por sua vez, não trata esse tipo de select complexo quando requer o número total de registros ao banco, utilizado em SELECT COUNT(…), que retorna um erro de má formação de SQL.
Corrigi esse problema adicionando uma linha ao código do Will_paginate, no método method_missing_with_paginate que o faz rejeitar opções da chave :select, fazendo sempre um count(*) no banco. Esse método se encontra no arquivo finder.rb que está no diretório will_paginate\lib\will_paginate\, na pasta de plugins do seu projeto. Veja o trecho alterado:
def method_missing_with_paginate(method, *args, &block)
# ....
# :total_entries and :count are mutually exclusive!
total_entries = unless options[:total_entries]
unless args.first.is_a? Array
# count expects (almost) the same options as find
count_options = options.reject { |key, value| key == :count or key ==
rder }
#***aqui removo as opções de select também, que causam erro de SQL ***
count_options = count_options.reject { |key, value| key == :select }
# merge the hash found in :count
# this allows you to specify :select,
rder, or anything else just for the count query
count_options.update(options.delete(:count)) if options[:count]
# thanks to active record for making us duplicate this code
count_options[:conditions] ||= wp_extract_finder_conditions(finder, args)
count = count(count_options)
count.respond_to?(:length) ? count.length : count
#....
end
end
Depois de alterar o código, é necessário reiniciar o servidor.
Disponibilizei o arquivo com o código alterado: http://www.mediafire.com/?5n1icgnxwy5






[...] [update]Existe um erro nesta integração entre os dois plugins, veja aqui como corrigir[/update] [...]