#ruby-on-rails #ruby-on-rails-3
#ruby-on-rails #ruby-on-rails-3
Вопрос:
Я пишу приложение rails, в котором пользователи генерируют маркеры на карте Google, а затем имеют возможность загружать их в виде файлов .kml. Дело в том, что я добавляю функцию для изменения карты так, чтобы они могли видеть, когда они добавили определенные маркеры на карту, с интервалами. Я хочу использовать ту же форму, что и для предыдущей загрузки файлов .kml, но также добавить дополнительную кнопку отправки, которая ничего не будет делать, кроме запуска некоторой логики контроллера. Изначально у меня был:
<%= form_tag customMapGenerate_path(@device, :format => 'kml'), :method => :get do %>
для моего form_tag
Как я могу изменить две мои ссылки отправки:
<%= submit_tag 'Download KML' %>
<%= submit_tag 'Display on map' %>
чтобы отобразить KML, а затем ничего не отображать (и оставаться на странице) для обоих приведенных ниже условий:
if(params[:commit] == "Download KML")
respond_to do |format|
format.kml
end
return
elsif(params[:commit] == "Display on map")
//simple ruby code
return
end
Ответ №1:
Вы можете использовать button_tag
Удалите формат из form_tag
, и он должен дать вам что-то вроде этого
<%= form_tag customMapGenerate_path(@device), :method => :get do %>
// your form here
<%= button_tag 'Download KML', value: 'kml', name: 'format' %>
<%= button_tag 'Display on map', value: 'html', name: 'format' %>
<% end %>
Затем в вашем контроллере вы просто используете respond_to do |format|
для различения между вашими двумя типами ответов.
Комментарии:
1. его отправка 1 в поле format, а не html и т. Д
Ответ №2:
Вы можете задать заголовки ответа в своем действии, чтобы заставить браузер загрузить файл
response.headers['Content-Type'] = 'application/vnd.google-earth.kml xml'
response.headers['Content-Disposition'] = 'attachment; filename=map.kml'