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

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

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

Спасибо


person Nick Ginanto    schedule 19.10.2011    source источник


Ответы (2)


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

<%= 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-адрес, как в строке запроса.

person agmcleod    schedule 19.10.2011
comment
Спасибо. Если я добавлю его в application.js, будет ли он применим ко всем представлениям, страницам и т. д.? - person Nick Ginanto; 19.10.2011
comment
По умолчанию application.js включен в ваш файл макета. Если вы посмотрите, проверьте строку: <%= javascript_include_tag :defaults %> или что-то в этом роде. Символ по умолчанию включает в себя различные библиотеки js, а также application.js. Если вы не используете Rails 3.1, вам может потребоваться добавить jQuery в ваше приложение, чтобы приведенный выше код работал. - person agmcleod; 19.10.2011

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

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

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

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

Так что технически это все еще кнопка, но очень похожая на ссылку. Это немного взломано, хотя :)

person liver    schedule 27.02.2016