Rails 3 отправьте форму со ссылкой - PullRequest
16 голосов
/ 25 января 2011

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

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

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

Ответы [ 5 ]

29 голосов
/ 12 октября 2012

Для людей, которые пришли сюда через 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).

13 голосов
/ 08 октября 2011

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

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

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

link_to_submit 'Submit Form'

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

13 голосов
/ 25 января 2011

«Правильно» - это хитрое слово в этом контексте;). Можно спросить, почему вы не просто берете элемент 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 этот помощник исчез.

7 голосов
/ 17 августа 2011

С 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 голосов
/ 03 июня 2011

В 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запросы, иди сюда для отличной статьи из двух частей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...