В моем приложении Rails есть выпадающий список:
<%= select_tag(:report_id, options_for_select([["Summary1", 7], ["Summary2", 6]])) %>
Пользователь выбирает значение из раскрывающегося списка выше и нажимает кнопку, показанную ниже, для создания PDF-файла:
<%= link_to 'Generate', pdf_path(format: :pdf, report: :report_id), class: 'btn btn-primary' %>
Это моя функция контроллера, которая вызывается при нажатии кнопки выше:
def show
init_report_data
respond_to do |format, report|
format.html
format.pdf do
puts "***************** report id" + report.to_s + "*************************"
case report
when 7
report_name = 'summary1'
when 6
report_name = 'summary2'
end
render pdf: "Forecast Report",
template: "forecast/" + report_name + ".html.erb",
disposition: "attachment",
:page_width => '18in',
:page_height => '15in'
end
end
end
Функция контроллера вызывается нормально, но значение параметра «отчет» оказывается пустым внутри указанной выше функции контроллера.
Что я здесь делаю не так? Пожалуйста помоги!





Проблема в том, что вы здесь не используете форму.
Используйте form_tag и держите select_tag внутри form_tag.
Также вам придется заменить link_to на кнопку submit. Не забудьте включить следующую строку в форму, чтобы запросить ответ в формате pdf.
<%= hidden_field_tag :format, :pdf %>
Причина в том, что тег link_to не передает ваше значение select_tag или любое другое значение поля. В этом сценарии вы должны использовать form, и у него нет другого выхода.
Или используйте JavaScript для замены id в url при изменении параметра выбора. Поскольку вы пытаетесь получить действие show, я предполагаю, что вам нужно передать идентификатор в path.
похоже, вы не указали путь для формы. это должно быть что-то вроде этого <% = form_tag do_some_things_path, method:: get do%>
<% = form_tag прогноз_report_pdf_path do%> <% = select_tag (: report_id, options_for_select ([["Summary1", 7], ["Summary2", 6]]))%> <% = hidden_field_tag: format,: pdf%> <% = submit_tag ("Generate Report")%> Этот код работал. Большое спасибо за ваш вклад!
<%= form_tag forecast_report_pdf_path do %>
<%= select_tag(:report_id, options_for_select([["Summary1", 7], ["Summary2", 6]])) %>
<%= hidden_field_tag :format, :pdf %>
<%= submit_tag("Generate Report") %>
<% end %>
Этот код работал. Большое спасибо за ваш вклад!
Привет, @abhilashreddy, я добавил форму и преобразовал link_to в button_to: `<div class = " form-group "style = " width: 40% "> <% = form_tag ({}, {: method =>: get}) do %> <% = select_tag (: report_id, options_for_select ([["Summary1", 7], ["Summary2", 6]]))%> <% end%> </div> <div style = "padding-left : 10px; верхняя граница: -52px; " > <% = button_to 'Создать отчет', прогноз_report_pdf_path (формат:: pdf, отчет:: report_id), class: 'btn btn-primary'%> </div> `Но все равно не повезло! Пожалуйста, помогите!