【发布时间】:2010-12-06 08:15:25
【问题描述】:
我经常发现自己在写这个:
params.delete(:controller)
params.delete(:action)
params.delete(:other_key)
redirect_to my_path(params)
删除的痕迹感觉不对,也不对:
[:controller, :action, :other_key].each do |k|
params.delete(k)
end
有什么更简单更干净的吗?
【问题讨论】:
-
当我写到第二种方法感觉不对的时候,我的意思是考虑到 Hash API 的丰富性,我怀疑已经有一些方法或习语可以解决这个问题,还有一个猴子补丁没有必要。不过,也许不是。非常感谢所有回答的人!
-
Hash#except 正是我想要的。我不记得它是 Rails 核心扩展,所以当我在 Hash API 中找不到它时,我感到很困惑。
-
请注意,严格来说答案是
Hash#except!,但Hash#except才是正确的选择(不要与params混淆!)。根据经验,除非绝对需要,否则不要就地处理任何对象,副作用可能会产生意想不到的结果。
标签: ruby-on-rails ruby