Rails 3提交带有链接的表单

时间:2011-01-25 09:00:00

标签: ruby-on-rails forms hyperlink

如何使用正确的rails 3格式链接提交表单? 感谢。

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

我的代码示例。

5 个答案:

答案 0 :(得分:29)

对于通过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 %>

只要链接是表单的子级(即,只要从link_to_submit块中的某个位置调用form_for),JQuery代码就会起作用。

答案 1 :(得分:13)

“正确”在这方面是一个棘手的词;)。有人可能会问为什么你不只是采用button元素并使其看起来像一个链接?

无论如何 - 你无法用纯HTML实现这一点(至少我不知道)。使用Javascript框架,例如jQuery你可以简单地做这样的事情:

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

Rails 2.3.x有一个link_to_remote帮助器,你可以指定一个:submit参数(= DOM元素的ID,默认是父窗体)。所以你能够写下:

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

但是随着Rails 3对UJS的推动,这个助手已经不见了。

答案 2 :(得分:13)

您可以将以下内容添加到应用程序助手中:

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

然后在您的视图文件中,您可以调用

link_to_submit 'Submit Form'

链接必须是表单的子项。

答案 3 :(得分:7)

使用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,只需简单的表单提交。

答案 4 :(得分: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请求,go here for a great 2-part article on it.