使用rails中的link_to提交表单

时间:2012-07-25 07:58:48

标签: ruby-on-rails link-to

我正在尝试使用link_to提交表单,如下所示:

 <%= form_for(@post,  :url=> '/post/action', :method=> 'post', :html => {:id=>'form_id'} ) do |f| %>
  ....

 <%= link_to 'submit', "/post/action", :onclick=>"document.getElementById('form_id').submit()" %>

  ....

但它没有发布表单,它只是将我的表单重定向到指定的URL。有谁知道怎么做?

2 个答案:

答案 0 :(得分:24)

您可以使用:

<%= link_to 'submit', "#", :onclick => "$('#form_id').submit()" %>

如果您使用的是JQuery和更高版本的rails。

上面会有效,但是如果你有一个非常长的页面,它将导航到页面顶部,因为“#”所以如果你想避免你可以这样做:

<%= link_to 'submit', "", :onclick => "$('#form_id').submit()" %>

答案 1 :(得分:8)

我认为这两件事都会发生。浏览器开始提交表单,但它也跟在链接的href之后。您可以通过链接到#而不是/post/action ...

来解决此问题

...但是,我不建议这样做。有一些更好的方法:

首先,您可以使用按钮而不是链接。你必须设计它以使它看起来像一个链接,但这不应该是一个问题。它会更好,因为它不会破坏最小惊喜原则(阅读代码的人希望使用按钮提交表单)并且您不需要JavaScript。

如果您坚持使用链接,至少应该将JavaScript代码从视图移动到JavaScript文件。然后不引人注意地添加此行为(尽管,您将无法通过链接获得良好的后备)。假设您使用的是jQuery,它应该像以下一样简单:

$(document).on('click', '[data-submit-form]', function(e) {
  e.preventDefault();
  $(this).closest('form').submit()
}