#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;
}
Так что технически это все еще кнопка, но выглядит очень похоже на ссылку. Хотя это немного халтурно 🙂