Rails 3提交带有链接的表单

我如何提交带有正确rails 3格式链接的表单? 谢谢。

 

我的代码示例。

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

无论如何 – 你无法用纯HTML实现这一点(至少我不知道)。 使用像jQuery这样的Javascript框架,您可以简单地执行以下操作:

 $('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的推动,这个助手已经消失了。

对于通过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 %> Submit the Form  <% end %> 

只要链接是表单的子link_to_submit (即,只要从form_for块中的某个地方调用link_to_submit ),JQuery代码就可以工作。

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

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

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

 link_to_submit 'Submit Form' 

并且链接必须是表单的子级。

使用jquery,这种单线程可以很好地用于简单的forms。

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

在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 %>
<%= f.text_field :title %>

<%= f.submit %>

<% 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请求, 请到这里查看关于它的两篇很棒的文章。