如何使用正确的rails 3格式链接提交表单? 感谢。
<%= form_for @post do |f| %>
<%= f.label :title %><br>
<%= f.text_field :title %>
<p><%= f.submit %></p>
<% end %>
我的代码示例。
答案 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.