ActiveSupport provides a hash extension: Hash#except. It allows you to return a new hash except specified keys without modifying the original.
Assuming you have installed the active_support gem:
ruby-1.9.3> require 'active_support/core_ext/hash/except.rb'
=> true
ruby-1.9.3> a = {x: 2, y: 1, z: 3}
=> {:x=>2, :y=>1, :z=>3}
ruby-1.9.3> b = a.except(:x)
=> {:y=>1, :z=>3}
ruby-1.9.3> c = a.except(:x, :y)
=> {:z=>3}
ruby-1.9.3> a
=> {:x=>2, :y=>1, :z=>3}
ruby-1.9.3> b
=> {:y=>1, :z=>3}
ruby-1.9.3> c
=> {:z=>3}