19 Aug
duccio

duccio il 19 August 2007 parla di Rails Snippet

Ferret: come evitare accessi al db

La funzione find_by_contents cerca nell’indice del Ferret e restituisce una collezione di oggetti contenenti il testo cercato. Supponendo di usare acts_as_ferret su un ipotetico modello Item:

    1 class Item < ActiveRecord::Base   
    2    ... 
    3    acts_as_ferret :fields => {
    4       :name, 
    5       :description
    6    }
    7 end

avreste, come risultato, un insieme di oggetti item per i quali il recupero dei campi name e description implica un accesso al db. Questo accade perchè, se non altrimenti specificato, il Ferret indicizza i testi in modo da poterci fare le ricerche ma in una forma non riusabile.

Per evitare gli accessi al db:

    1 class Item < ActiveRecord::Base   
    2    ... 
    3    acts_as_ferret :fields => {
    4       :name => {:store => :yes},
    5       :description => {:store => :yes}
    6    }
    7 end

Ricordate di specificare nel metodo find_by_contents i campi da recuperare direttamente dall’indice:

    1 @results = Item.find_by_contents(params[:search][:text], :lazy => [:name, :description])

Scrivi un commento