permit returns a new hash with those keys in it, so you’re not modifying the real params variable. You’re also not saving a reference to the hash trip_params returns, so you get it fresh each call in save.
Try this:
def save
tp = trip_params
tp[:name] = 'Modifying name in place'
# ... use tp later, it'll be in there
end
Or, if you really want it to be used the way you previously did, modify trip_params like so:
def trip_params
@trip_params ||= params.require(:trip).permit(:name, :date)
end
Now that hash is lazily cached and the same one is returned on subsequent trip_params calls.