【问题标题】:Rails 3 submit form with linkRails 3 提交带有链接的表单
【发布时间】:2011-06-15 01:27:32
【问题描述】:

如何提交带有正确 rails 3 格式链接的表单? 谢谢。

<%= form_for @post do |f| %>
<%= f.label :title %><br>
<%= f.text_field :title %>
<p><%= f.submit %></p>
<% end %>

我的代码示例。

【问题讨论】:

  • 添加一些代码开始会很棒

标签: ruby-on-rails forms hyperlink


【解决方案1】:

对于通过 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 %>

只要链接是表单的子级,JQuery 代码就可以工作(也就是说,只要从 form_for 块中的某个位置调用 link_to_submit)。

【讨论】:

  • 嗯,确实是比较靠谱的帮手。
  • 是的,如果没有你的回答,我是不会明白的。 jQuery和link_to_function的存在都是你。
  • 这可以在表单对象f.submit_link上完成吗?
【解决方案2】:

“正确”在这种情况下是一个棘手的词;)。有人可能会问,为什么你不只是采用 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 的推动,这个助手消失了。

【讨论】:

  • 文章链接被破坏/被广告劫持。
【解决方案3】:

您可以将以下内容添加到应用程序助手中:

def link_to_submit(text)
  link_to_function text, "$(this).closest('form').submit()"
end

然后在你的视图文件中你可以调用

link_to_submit 'Submit Form'

并且链接必须是表单的子级。

【讨论】:

  • 不错!甚至不知道这存在。
  • 对于从 Google 来到这里的人,请在下面查看我在此答案中发现的改进。
【解决方案4】:

使用 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,只需简单的表单提交。

【讨论】:

  • 我使用了这种方法,效果很好。虽然,你可能想添加一个'return false;'到 :onclick 的末尾,以确保不遵循链接。
【解决方案5】:

在 Rails 3 中,link_to_remote 助手消失了,但被替换为

link_to 'submit me', url_for(@post), {:remote =&gt; true, :class =&gt; '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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多