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!
peroHash#except
est la meilleure solution (ne pas utiliser la fonctionparams
!). 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.