Подтвердить что ты не робот

Rails 3 отправить форму со ссылкой

Как я могу отправить форму со ссылкой на правильный формат рельсов 3? Спасибо.

<%= form_for @post do |f| %>
<%= f.label :title %><br>
<%= f.text_field :title %>
<p><%= f.submit %></p>
<% end %>

Мой пример кода.

4b9b3361

Ответ 1

"Правильно" - это сложное слово в этом контексте;). Можно спросить, почему вы не просто принимаете элемент button и делаете его похожим на ссылку?

В любом случае - вы не можете добиться этого с помощью простого HTML (по крайней мере, насколько мне известно). С каркасом Javascript, например, например. jQuery вы могли бы просто сделать что-то вроде этого:

$('a').click(function(){
    $('form').submit();
    return false;
});

Rails 2.3.x имел link_to_remote помощник, который позволяет указать параметр :submit (= идентификатор элемента DOM, по умолчанию - родительская форма). Таким образом, вы могли написать:

link_to_remote 'submit', :url => {…}, :submit => "my_form"

Но с Rails 3 нажмите на UJS, этот помощник исчез.

Ответ 2

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

def link_to_submit(*args, &block)
  link_to_function (block_given? ? capture(&block) : args[0]), "$(this).closest('form').submit()", args.extract_options!
end

Затем, как заявил Zequez, для простых ссылок вы можете просто сделать это на ваш взгляд:

<%= link_to_submit 'Submit Form' %>

... и для более сложных кнопок вы можете передавать параметры HTML и блок, который будет использоваться внутри ссылки. Например, если вы используете Twitter Bootstrap, это позволяет добавлять классы CSS, форматирование и значки:

<%= link_to_submit( class: 'btn btn-primary' ) do %>
  <strong>Submit</strong> the Form <i class="icon-arrow-right"></i>
<% end %>

Код JQuery будет работать до тех пор, пока ссылка является дочерним элементом формы (то есть до тех пор, пока link_to_submit вызывается откуда-то внутри блока form_for).

Ответ 3

В помощник приложения вы можете добавить следующее:

def link_to_submit(text)
  link_to_function text, "$(this).closest('form').submit()"
end

Затем внутри ваших файлов просмотра вы можете просто вызвать

link_to_submit 'Submit Form'

И ссылка должна быть дочерней по форме.

Ответ 4

С jquery этот однострочный лайнер будет работать отлично для простой формы.

<%= link_to t("translate.submit"), "#", class: "make it beautiful", :onclick=>"$('form').submit()" %>

Конечно, вам действительно не нужно использовать jquery, просто найти элемент dom для вашей формы тоже будет хорошо.

<%= link_to t("translate.submit"), "#", class: "make it beautiful", :onclick=>"document.getElementById('your_form_id').submit()" %>

Таким образом, вы не используете ajax, просто отправить форму.

Ответ 5

В Rails 3 помощник link_to_remote исчез, но он заменен на

link_to 'submit me', url_for(@post), {:remote => true, :class => 'submit_me'}

В вашем случае вы, вероятно, хотите, чтобы ваша форма выполняла AJAX, например:

<%= form_for @post, :remote => true do |f| %>
  <%= f.label :title %><br>
  <%= f.text_field :title %>
  <p><%= f.submit %></p>
<% end %>

С сопутствующей ссылкой:

link_to 'submit me', '#', :class => 'submit_me'

Затем в файле .js, включенном в тело страницы:

$('.submit_me').click(function() {
  $('form').submit();
  return false;
});

Идея заключается в том, что все, что сложнее, чем превращать ссылку или форму в запрос ajax, должно выполняться с помощью обратных вызовов jQuery, перечисленных здесь:

https://github.com/rails/jquery-ujs/wiki/ajax

И если вы хотите действительно войти в интерактивные запросы AJAX, перейдите сюда для большой статьи из двух частей.