【问题标题】:Rails, how do you submit a form with a text link?Rails,您如何提交带有文本链接的表单?
【发布时间】:2025-11-30 16:55:01
【问题描述】:

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

<% 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 问题吗?
  • Ruby 和 Rails 不一样吗?我从 Ruby 开始这个问题......
  • Ruby on Rails != Ruby。您的问题是特定于 Rails 的。您使用的是 Rails 方法,而不是 Ruby。
  • 感谢您清理...

标签: ruby-on-rails ruby forms


【解决方案1】:

不,您没有正确使用 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】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 你得了span-itis。在互联网上寻找适当的补救措施。还要考虑这样的事情:&lt;li&gt;&lt;%= link_to content_tag(:span, "SAVE"), :action =&gt; "index_users", :class=&gt; "a_link approve" :onclick=&gt;"$('#form1').submit();"%&gt;&lt;/li&gt;。更好的是,甚至不要使用span
        • 我尝试了您使用 :onclick=>"$('#form1').submit(); 的建议,但它有时仅在 Chrome 中有效......为什么会这样,你知道吗?