如何使用文本链接提交表单?Rails

6

我正在尝试让这个表单正确提交。以下是我目前的代码:

<% form_for(:user, :url => update_user_setting_path, :remote => true, :html => {:method => :post, :class => "search_form general_form"}) do |f| %> 

按钮将使用以下代码呈现:

<li><%= link_to raw("<span class='button approve'><span><span>SAVE</span></span></span>"), :action => 'create' %></li>

我正在使用 action create,这样做正确吗?

以下是渲染的表单标签:

<form method="post" data-remote="true" class="search_form general_form" action="/settings/2/update_user" accept-charset="UTF-8">

我漏掉了什么?谢谢你的帮助!

这不是一个Rails的问题吗? - Jordan Dea-Mattson
Ruby和Rails不是一样的吗?我用Ruby开始了这个问题... - Mitch Moccia
3
Ruby on Rails != Ruby。你的问题是针对Rails特定的。你正在使用Rails的方法,而不是Ruby的。 - kyrylo
感谢您澄清这一点... - Mitch Moccia
4个回答

15

不,您没有正确使用link_to。您需要使用submit标签提交表单,而不是link_to标签,例如:

<% form_for(:user, :url => update_user_setting_path, :remote => true, :html => {:method => :post, :class => "search_form general_form"}) do |f| %>
  ...
  <li><%= f.submit "Save" %></li>
如果您想使用文本链接,您需要使用JavaScript提交表单。例如,如果您正在使用jQuery,您可以执行以下操作:
<%= link_to 'Save', "#", :onclick=>"$('.search_form').submit()" %>

2
如果您使用jQuery,就不需要使用id或选择器,只需执行以下操作即可:
= link_to 'Save', "#", onclick: "$(this).closest('form').submit()"

2

我喜欢Pan的解决方案,但我更倾向于直接使用表单的ID,你可以从dom_id(obj)获取它。form_for助手也使用dom_id(obj)来分配表单的ID。这样,你就不会依赖手动设置类,也不会因为意外提交共享相同CSS类的多个表单而受到影响。看起来有点奇怪,但我通常都有一个自定义的FormBuilder,所以我只需添加一个通用的link_to_submit方法来封装它:

<%= link_to 'Save', "#", :onclick => "$('##{dom_id(@user)}').submit()" %>

0

感谢您的回答... 我最终使用了这个方法,它非常好用:

              <li><%= link_to raw("<span class='button approve'><span><span>SAVE</span></span></span>"), "index_users", :onclick=>"document.forms['form1'].submit();"%></li>

1
你得了“span-itis”。在互联网上寻找适当的解决方法。还可以考虑像这样做:<li><%= link_to content_tag(:span, "SAVE"), :action => "index_users", :class=> "a_link approve" :onclick=>"$('#form1').submit();"%></li>。更好的做法是,甚至不要使用“span”。 - Zabba
我尝试了你的建议,使用:onclick=>"$('#form1').submit();但在Chrome中它只有时候有效... 你知道为什么吗? - Mitch Moccia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接