2010-07-10 5 views
0

J'ai un portefeuille en ligne créé dans Rails avec différents projets. Je veux être capable de filtrer les projets par mots-clés. Mon approche consiste à définir une méthode pour chaque mot-clé dans le ProjectsController et à lier les mots-clés pour appeler les méthodes.Ajuster routes.rb pour l'appel de méthode dans le contrôleur

Par exemple les mots-clés = graphic_design:

<%= link_to 'Graphic Design', :action => "filter_"[email protected]_s %> 

De cette façon, je reçois l'erreur:

Couldn't find Project with ID=filter_graphic_design 

Ceci est tout à fait évident pour moi. Ma question: Y a-t-il un moyen de dire aux routes.rb de se comporter différemment uniquement pour les méthodes 'filter_'? D'autres suggestions?

Répondre

1

Votre approche est erronée. Pourquoi avez-vous besoin d'une méthode filter_ pour chaque mot clé en premier lieu? C'est une solution assez simple. Tout d'abord définir un itinéraire nommé dans votre routes.rb:

map.filter '/projects/:filter_this_for_me', :controller => 'projects', :action => 'filter' 

votre point de vue,

<%= link_to 'Graphic Design', filter_path("filter_" + @project.keyword.to_s) %> 

Dans votre action de filtrage,

def filter 
    logger.info("Parameters that is being received: #{params}") 
    filter_what = params[:filter_this_for_me] 

    if(!filter_what.nil? && !filter_what.blank?) 
     # Here filter_what will have "filter_graphic_design" or "filter_something" 
     # With which you can filter any data that you want. 
     # Filter your projects here. 
    end 
end 
1

Je pense que quelque chose comme cela pourrait fonctionner

map.connect "/projects/filter_{filter}", :controller => 'projects', :action => 'filter' 

N'a pas essayé si

Questions connexes