Как передать экземпляр объекта через link_to (например, Date) - PullRequest
0 голосов
/ 02 ноября 2011

У меня есть представление Rails, которое создает отчет в формате HTML на основе того, что пользователь выбрал диапазон дат отчета, и с этим все хорошо.

Если пользователям нравится то, что они видят, есть кнопка для экспорта того же отчета, что и CSV.

Моя проблема в том, как удобно передать диапазон дат, ранее выбранный пользователем. Я читал различные вопросы / ответы по стеку о передаче параметров через link_to, и это работает несколько, но дата отправляется в виде текстовой строки, и мне действительно нужно, чтобы дата передавалась как объект Date.

Вот мой текущий link_to, который передает параметры даты в виде строк:

<%= link_to image_tag("Buttons/ExportReport.png", :border => 0),
      export_sales_path(:start => @start_date,
                        :end => @end_date,
                        :sales => @items) %>

Буду признателен, если кто-нибудь скажет мне, как передать экземпляр объекта через link_to.

Спасибо за чтение.

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

Вы не можете передавать объекты в 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, который позволит вам при необходимости предоставить очень длинный список элементов.

0 голосов
/ 02 ноября 2011

Я думаю, что это невозможно ... все, что вы можете сделать, это передать дату в виде строки и затем проанализировать эту строку в объект Date в контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...