Rails,你如何提交带有文本链接的表单?

时间:2011-02-11 01:09:11

标签: ruby-on-rails ruby forms

我正在尝试正确提交此表单。这是我到目前为止所做的:

<% 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>

我正在使用动作创建,这是正确的吗?

以下是呈现的表单标记:

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

我错过了什么?谢谢你的帮助!

4 个答案:

答案 0 :(得分:14)

不,您没有正确使用link_to。您需要使用提交标记来提交表单,而不是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()" %>

答案 1 :(得分: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()" %>

答案 2 :(得分:1)

如果你有jquery,你不需要使用id或者选择器,你可以这样做:

= link_to 'Save', "#", onclick: "$(this).closest('form').submit()"

答案 3 :(得分:0)

感谢您的回答...我最终使用了这个并且效果很好:

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