2010-03-15 6 views
0

Je fais un simple formulaire de recherche dans les rails. À mon avis de recherche J'ai deux boîtes de sélection avec des valeurs fixes telles que:simple recherche dans les rails

SELECT BOX 1   SELECT BOX 2 
ALL,     ALL, 
FR,     FR, 
US,     US, 
DE     DE 

Et je 2 champs dans mon DB avec country_from et country_to.

Donc, pour faire une recherche simple comme FR-US-je utiliser:

@search_result = Load.find(:all, :conditions => "country_from='#{params[:country_from]}' AND country_to='#{params[:country_to]}'") 

qui est très bien, mais je dois mettre en œuvre l'option ALL ainsi, quand je fais une recherche comme de DE à ALL Je reçois une liste avec tous les pays dans country_to

I image Je peux le faire avec ifs ... mais quelle serait la manière la plus efficace de le faire?

Répondre

1

Voici ce que vous faites:

cond = {} 
cond[:country_from] = params[:country_from] unless params[:country_from] == "AL" 
cond[:country_to] = params[:country_to] unless params[:country_to] == "AL" 

@search_result = Load.all(:conditions => cond) 
1

si je comprends bien, il serait

@search_result = Load.find(:all, :conditions => ["country_from = ? AND country_to IN (?)", params[:country_from], params[:country_to]]) 
+0

qui fonctionne dans le premier cas quand j'ai un pays fixe à partir et à la valeur. Mais quand je sélectionne tout, il doit interroger tout de la table. Par exemple, de DE à ALL, signifie query où country_from = 'DE'. – Adnan

+0

si j'ai compris ce que vous voulez, cela fonctionne pour vous. cette recherche retournera, par exemple, chaque 'Load' avec' country_from = DE' et 'country_to = [FR, US, DE]'. –

Questions connexes