2009-05-21 19 views
1

que je veux transmettre explicitement un booléen faux params [: fermé] et j'ai quelque chose comme ceci:passant des paramètres booléens aux routes nommées dans des rails

= link_to 'appointments', appointments_path(:closed => false) 

Mais cela ne fonctionne pas comme rails est le traitement un faux booléen car je ne veux rien pour ce params, y a-t-il un moyen de contourner ce problème?

mise à jour: le faux je passe en est un booléen et je veux une url comme ce

\appointments?closed=false 

mais tout ce que je reçois est juste \ rendez-vous. J'espère que c'est un peu plus clair.

Question secondaire, est-ce une bonne pratique de passer les booléens comme paramètres?

+0

peut vous offrir plus de contexte à la façon dont ce doit être interprété? Est-ce un paramètre de requête http ...? – Demi

Répondre

0

Cela se traduira par? Closed = false. params[:closed] renverra alors "false", qui est une chaîne, et évaluera à true.

J'aurais utilisé des routes nommées pour cela, au lieu de manic if/else en vérifiant l'action 'index'.

# routes.rb 
map.resources :appointments, :collection => {:closed => :get, :open => :get} 

# controller 
def closed 
    @appointments = Appointment.closed 
end 

def open 
    @appointments = Appointment.open 
end 
+0

Le faux que je passe est un booléen et non une chaîne donc params [: closed] est emtpy. En fait, l'url aboutit à? Closed = false mais comment? Si je le mets à closed = true cela fonctionne mais pas faux. – sai

+0

Que diriez-vous d'essayer l'approche que j'ai suggéré à la place? –

+0

Dans l'action d'index de rendez-vous, je filtre la collection en fonction de divers paramètres passés, de telle sorte que la valeur renvoyée dans l'index soit dynamique. Dans la vue que l'utilisateur peut sélectionner depuis le menu déroulant pour le statut, la date, la fermeture ou non, etc. Il n'est donc pas idéal de créer des itinéraires nommés pour chacun d'entre eux. – sai

3

Probablement trop tard maintenant, mais essayez d'utiliser une chaîne à la place:

appointments_path(:closed => 'false') 
0

On dirait que vous avez besoin de 3 différentes options. Fermé non sélectionné, fermé défini sur Vrai ou défini sur Faux.

Si vous avez besoin de distinguer fermé de ne pas être sélectionné et étant réglé sur faux comme ceci, vous devrez simplement utiliser des chaînes et params[:closed] == 'false'. Si les rails avaient une capture qui traduirait une chaîne d'URL en une valeur booléenne, vous ne pourriez pas passer la chaîne "false" comme paramètre qui serait bizarre.

Si votre paramètre fermé était TOUJOURS VRAI ou VRAI (sans option non sélectionnée), le faire comme vous le faites est correct.

Vous spécifiez dans la méthode _path avec :closed => true ou :closed => false puis le tester avec params[:closed] comme dans:

if params[:closed] 
    blah 
else 
    other_blah 
end