159 votes

Ruby on Rails : Supprimer plusieurs clés de hachage

Je me retrouve souvent à écrire cela :

params.delete(:controller)  
params.delete(:action)  
params.delete(:other_key)  
redirect_to my_path(params)  

La traînée de suppressions ne semble pas correcte, et elle ne l'est pas non plus :

[:controller, :action, :other_key].each do |k|
  params.delete(k)
end

Y a-t-il quelque chose de plus simple et de plus propre ?

0 votes

Lorsque j'ai écrit que la deuxième approche ne me semblait pas correcte, je voulais dire qu'étant donné la richesse de l'API Hash, je soupçonnais qu'il existait déjà une méthode ou un idiome pour cela et qu'un patch pour les singes ne serait pas nécessaire. Peut-être pas, cependant. Merci beaucoup à tous ceux qui ont répondu !

3 votes

Hash#except était exactement ce que je cherchais. Je ne me souvenais pas qu'il s'agissait d'une extension du noyau de Rails. J'ai donc été étonné de ne pas la trouver dans l'API Hash.

2 votes

Notez que la réponse stricte est Hash#except! pero Hash#except est la meilleure solution (ne pas utiliser la fonction params !). En règle générale, ne modifiez pas un objet en place à moins que cela ne soit absolument nécessaire, les effets secondaires peuvent avoir des résultats inattendus.

2voto

Pesto Points 16648

Je ne sais pas ce qui, selon vous, cloche dans la solution que vous proposez. Je suppose que vous voulez un delete_all sur Hash ou autre ? Si c'est le cas, réponse de tadman fournit la solution. Mais franchement, pour un cas unique, je pense que votre solution est extrêmement facile à suivre. Si vous l'utilisez fréquemment, vous pourriez vouloir l'intégrer dans une méthode d'aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X