submit_tag без кнопки или изображения на рельсах

#ruby-on-rails-3 #form-submit

#ruby-on-rails-3 #форма-отправить

Вопрос:

Как мне создать действие отправки в форме не с помощью кнопки (с submit_tag), а не с помощью изображения (image_submit_tag)?

Я бы хотел, чтобы отправленный текст был интерактивным, как ссылка

Спасибо

Ответ №1:

Вам нужно будет сделать это с помощью javascript, поскольку ссылки являются запросом GET, а не запросом post. Итак, допустим, у вас есть следующий код:

 <%= form_for @post, :html => { :id => 'form' } do |f| %>
  <div class="field">
    <%= f.label :title %>
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :body %>
    <%= f.text_area :body %>
  </div>
  <div class="actions">
    <a id="submit">Submit</a>
  </div>
<% end %>
  

Затем вам нужно добавить следующее в один из ваших файлов javascript. Если вы используете < Rails 3.1, просто добавьте это в свой application.js . Если вы используете Rails 3.1, добавьте его в один из файлов js в каталоге assets / javascripts.

 $(function() {
  $('#submit').click(function() {
    $('#form').submit();
  });
});
  

Тем не менее, вы можете передать параметр метода в вызов метода link_to, чтобы использовать POST. Однако простое выполнение этого без javascript не приведет к отправке каких-либо данных формы. Таким образом, вам придется либо выполнить вышеуказанное, либо использовать javascript для добавления данных в URL, как в строке запроса.

Комментарии:

1. Спасибо. Если я добавлю его в application.js будет ли это применимо ко всем представлениям, страницам и т.д.?

2. Мое значение по умолчанию, application.js включен в ваш файл макета. Если вы посмотрите, проверьте строку: <%= javascript_include_tag :defaults %> , или что-то в этом роде. Символ по умолчанию включает в себя различные библиотеки js, а также application.js . Если вы не используете Rails 3.1, вам может потребоваться добавить jQuery в ваше приложение, чтобы приведенный выше код работал.

Ответ №2:

Вот один из способов, которым я это сделал:

 <a><%= submit_tag "Submit", class: "fake-button" %></a>
  

Затем измените стиль:

 .fake-button {
  padding: 0;
  border: none;
  display: inline;
}
  

Так что технически это все еще кнопка, но выглядит очень похоже на ссылку. Хотя это немного халтурно 🙂