【问题标题】:Button_to tag in a form closes form表单中的 Button_to 标记关闭表单
【发布时间】:2016-04-10 17:45:49
【问题描述】:

我目前正在使用 ruby​​ on rails 3 中的表单。所以在我的项目表单中,我有一个按钮可以让用户退出该项目。然而,奇怪的是,button_to 标签关闭了我的整个表单,我不能再使用我的提交按钮了。

所以我尝试了很多,但我不明白为什么会发生这种情况。

这是我的表格:

<%= form_for @project, html: { class: "form-horizontal project" } do |f| %>
    <div>
          <%= f.label :users, 'Project Users:',  :class => 'control-label', style: 'margin-bottom: 20px' %>
          <div>
            <% @project.users.order('last_name').each do |user| %>
                      <div style="margin-bottom: 15px">
                        <%= user.name %>
                          <%= button_to 'Sign Out', sign_user_out_project_path(user_id: user.id, id: @project), method: :delete, class: 'btn btn-danger btn-xs pull-right', style:'margin-right: 600px; margin-top: -20px' %>
                      </div>
            <% end %>
          </div>
        </div>


      <%= f.submit nil, :class => 'btn btn-primary' %>
      <%= link_to t('.cancel', :default => t("helpers.links.cancel")),
                projects_path, :class => 'btn btn-default' %>

    <% end %>

在我看来,这段代码看起来不错,因为所有标签都已完全关闭。但是,我认为使用button_to 时可能会有一些魔力,所以也许有人知道更好的方法来做我想做的事。

谢谢!

【问题讨论】:

  • 表单内的按钮提交表单。从您的代码中,我根本看不到表单的意义,因为没有其他输入,例如文本字段、选择、复选框等
  • 还有更多,我没有复制那部分,因为它与那个问题无关。所以我不能在我的表单中使用 button_to 吗?我可以用什么代替?我可以使用“link_to”吗?
  • 为什么不简单的link_to 呢?事实上,您可以直接在代码中将button_to 替换为link_to,它应该可以立即工作。
  • 是的,只是使用一个link_to
  • button_to 创建一个按钮标签。表单内的按钮标记在单击时提交该表单。 link_to 只是创建一个锚标记。

标签: ruby-on-rails ruby forms ruby-on-rails-3


【解决方案1】:

不要在表单中添加button_to

根据docs

(button_to) 生成一个包含单个按钮的表单,该按钮提交到由选项集创建的 URL

--

HTML 表单有一个clear spec,无论何时你都应该遵守它。

在表单中包含表单会导致“外部”表单停止工作(HTML 无法在 &lt;/form&gt; 之前处理另一个 &lt;form&gt;


简单的答案是从表单中删除您的button_to 并将其放在外面,(在您的情况下),用另一个元素替换它(link_to)。如果您希望链接看起来像一个按钮,您可以使用&lt;button&gt; markup 创建一个按钮:

<%= form_for @project, html: { class: "form-horizontal project" } do |f| %>
    <div>
          <%= f.label :users, 'Project Users:',  :class => 'control-label', style: 'margin-bottom: 20px' %>
          <div>
            <% @project.users.order('last_name').each do |user| %>
                      <div style="margin-bottom: 15px">
                        <%= user.name %>   
                        <%= link_to '<button>Sign Out</button>'.html_safe, sign_user_out_project_path(user_id: user.id, id: @project), method: :delete, class: 'btn btn-danger btn-xs pull-right', style:'margin-right: 600px; margin-top: -20px' %>
                      </div>
            <% end %>
          </div>
        </div>

      <%= f.submit nil, :class => 'btn btn-primary' %>
      <%= link_to t('.cancel', :default => t("helpers.links.cancel")),
                projects_path, :class => 'btn btn-default' %>

<% end %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    相关资源
    最近更新 更多