2010-05-06 6 views
0

Je ne connais pas trop le plugin searchlogic pour les rails (j'ai vu les railscasts mais cela n'a pas été utile par rapport au code spécifique ci-dessous). Quelqu'un peut-il décrire brièvement comment il est utilisé dans les trois méthodes ci-dessous? Merci pour toute réponse.ruby ​​on rails, searchlogic et refactoring

def extract_order 
@order_by = if params[:order].present? 
    field = params[:order].gsub(".", "_") 
    field = field.starts_with?('-') ? 'descend_by_'+field[1..-1] : 'ascend_by_'+field 
    field.to_sym 
else 
    # Workaround 
    'searchlogic'.to_sym 
end 
end 

def find_resources 
@search_conditions = params[:search_conditions] || {} # See http://www.binarylogic.com/2008/11/30/searchlogic-1-5-7-complex-searching-no-longer-a-problem/ 
@resources = @resource_model.send(@order_by).searchlogic(:conditions => @search_conditions) 
end 

def apply_filters 
f = filter_by 
f.each do |filter_field| 
    filter_constraints = params[filter_field.to_sym] 
    if filter_constraints.present? 
    # Apply searchlogic's scope 
    @resources.send(filter_field,filter_constraints) 
    end 
end 
end 

Répondre

0

La méthode apply_filter n'est pas appelée.

La méthode find_resources utilisent le contenu de @order_by (malgré l'ordre d'extrait de méthode n'est pas appelé)

Ainsi, la recherche dans le modèle des ressources est fait en utilisant les paramètres (probablement d'entrée utilisateur) stockées dans la variable condition de recherche et en utilisant le @order_by pour dire l'ordre qu'il doit utiliser.

Notez que votre application obtient un paramètre et change le "." à "_" et obtenir une sous-chaîne (1 ..- 1, en supprimant le premier caractère, et en l'utilisant comme paramètre pour une recherche étendue (ascend_by_ | descend_by_)
sa fonctionnalité de searchlogic et vous pouvez l'utiliser comme recherche dynamique:. ascend_by_name_of_field

OMI, il est à la recherche désordonnée Vous présumez que @order_by est pas vide et que la fonction extract_order déjà couru Une autre chose, des actions qui n'a pas d'interaction utilisateur ne devrait pas être accessible

+0

... Merci, mais qu'est-ce que vous pensez que la valeur de filter_by est censé être? Je pensais que c'était un mot clé intégré de searchlogic – JohnMerlino

+0

Je viens de mettre à jour ma réponse –

+0

En fait, vous aviez raison. e dehors quelque chose: def filter_by % w (state_key_eq site_num_like school_enabled_eq district_enabled_eq books_enabled_eq) fin – JohnMerlino