Если вы обнаружите, что делаете много, вы можете написать небольшой вспомогательный метод:
def set_unless_nil(hsh, key, val)
hsh[key] = val unless val.nil?
end
и затем:
set_unless_nil filters, :red, params[:search][:red]
И если ключ в хеше источника и назначения часто совпадает, вы можете написать:
def copy_key_unless_nil(src_hash, key, dest_hash)
dest_hash[key] = src_hash[key] unless src_hash[key].nil?
end
, а затем:
copy_key_unless_nil params[:search], :red, filters
В качестве альтернативы вы можете в любом случае просто установить значения в хэш, а затем убрать в конце хеш, чтобы удалить все ключи со значением nil:
filters.delete_if { |k, v| v.nil? }