В подобных случаях я часто использую вспомогательную функцию для создания URL-адресов на основе текущего набора параметров. Другими словами, я бы определил это:
def merge_params(p={})
params.merge(p).delete_if{|k,v| v.blank?}
end
А затем используйте его с url_for для создания URL-адресов для ваших форм и ссылок. Если вам нужно изменить и параметры, просто передайте их в объединение:
# url for the current page
url_for(merge_params)
# url for a different action
url_for(merge_params(:controller => 'bar', :action => 'bar'))
# et cetera
url_for(merge_params(:action => 'pasta', :sauce => 'secret'))
Это сохранит существующие параметры плюс любые переопределения, в которые вы сливаетесь.