Вы не можете передавать объекты в URL.Во-первых, существует ограничение в 1500 байт на длину URL-адреса, а во-вторых, объекты Ruby имеют отношение только к процессу, который их создал.
Важно помнить, что здесь нет предположения, чтопроцесс, который будет получать ваш запрос, будет таким же, как тот, который создал страницу со ссылкой на нее.Изначально Ruby on Rails начинает с чистого листа для каждого входящего запроса и не знает ничего, кроме того, что он может извлечь из трех основных средств: cache
, session
и вашей базы данных.
Для таких вещей, как @items
, вам нужно где-то сохранить этот набор, например, в базе данных, и добавить токен или идентификатор в URL, который ссылается на этот сохраненный набор, или преобразовать его в представление, которое вписывается вURL.Если список небольшой, вы всегда можете отправить @items.collect(&:id).join(',')
и затем декодировать его на принимающей стороне.
Если все, что вам нужно, это временное хранилище Memcache, которое можно использовать в подсистеме Rails.cache
,служит хорошим местом для подобных вещей.
Поскольку даты легко представить в виде целых чисел, вы всегда можете указать их в качестве параметров.Подход может выглядеть следующим образом:
<%= link_to image_tag("Buttons/ExportReport.png", :border => 0),
export_sales_path(
:start => @start_date.to_i,
:end => @end_date.to_i,
:sales => @items.collect(&:id).join(',')
) %>
Вы можете переключить его на запрос в стиле POST
, который позволит вам при необходимости предоставить очень длинный список элементов.