Использование submit_tag для объявления формата

#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'