На мой взгляд, мне нужно создать 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
Отображается как (игнорируя hr для этого поста)
{"ratings"=>{"G"=>"1", "PG"=>"1"}, "sort"=>"title"}
{"ratings"=>{"G"=>"1", "PG"=>"1"}, "sort"=>"title"}
Кажется, последний сорт, который нужно добавить, — это хранитель. То есть заголовок был последним добавленным в код действия контроллера, поэтому он является последним в двух разных списках параметров.
Я не понимаю, почему копирование параметров в две разные переменные действует как передача по ссылке, а не передача по значению. Я новичок в Ruby, но я не видел этого раньше в своей работе с Ruby.