На мой взгляд, у меня есть 2 URL, которые мне нужно создать. Каждый из них имеет отдельное значение для сортировки, но должен включать все предыдущие настройки для оценок.
Чтобы создать этот URL, на контроллере в качестве последнего шага я добавляю хэш params:
params.delete :controller
params.delete :action
params.delete :commit
params.delete :utf8
params[:ratings] = @ratings
@titleparams = params
@dateparams = params
@dateparams[:sort] = "release_date"
@titleparams[:sort] = "title"
Я ожидаю, что @titleparams и @dateparams будут отдельными копиями параметров. Затем я добавляю параметры сортировки к каждому.
Представление отображает их с тем же кодом, но с разными TH, как:
%a#release_date_header= link_to "Release Date", movies_path(@dateparams)
%a#title_header= link_to "Movie Title", movies_path(@titleparams)
У меня также есть раздел в верхней части страницы, чтобы увидеть, что @dateparams и @titleparams ожидают на следующей странице. Они одинаковые, и я не понимаю, почему.
%hr
=@titleparams
%hr
=@dateparams
%hr
Отображается как (игнорируя час для этого сообщения)
{"ratings"=>{"G"=>"1", "PG"=>"1"}, "sort"=>"title"}
{"ratings"=>{"G"=>"1", "PG"=>"1"}, "sort"=>"title"}
Кажется, последний добавляемый тип - это хранитель. То есть заголовок был последним видом, добавленным в код действия контроллера, поэтому он является последним в двух разных списках параметров.
Я не понимаю, почему копирование параметров в две разные переменные действует как передача по ссылке вместо передачи по значению. Я новичок в Ruby, но я не видел этого раньше в своей работе над Ruby.