如何在form_tag中实现取消按钮



我有一个使用form_tag帮助器的基本表单,但是我想添加一个取消按钮,这样做的语法是什么?我希望取消按钮显示为一个按钮,而不是一个链接,然后将用户带到另一个URL(表明他们不想提交表单)。

泰,弗雷德

如果您指的是重置按钮,请将以下内容粘贴到表单中:

<%= button_tag "Reset", type: :reset %>

测试后,它工作得很好,并重置了表单中的所有字段

如果您想清除/重置表单字段,请按照weltschmerz的建议执行。

然而,我通常希望取消按钮不会清除表单,而是将我从表单中带走,这意味着我不打算提交它。

如果你想要后者,我就做一个链接(或按钮)到你想要取消的页面,比如:

=link_to 'Cancel', my_page_path

或者如果你想要一个按钮:

= button_tag "Cancel", :type => 'button'

然后添加到你的控制器:

# before_filter for Rails 4.x and prior
before_action :check_for_cancel, :only => [:create, :update]
def check_for_cancel
  if params[:commit] == "Cancel"
    redirect_to my_page_path
  end
end

我建议使用<button>标签而不是submit标签,因为参数:commit可能是本地化的,因此在控制器中计算会很麻烦。

button_tag可以像任何其他字段一样有名称/值,所以你基本上可以用它创建一个标志。

下面的代码是我将使用的:

<%= button_tag t('buttons.cancel'), type: "submit", name: "cancel", value: true %>

在控制器:

before_filter :redirect_cancel, only: [:create, :update]
private
def redirect_cancel
  redirect_to my_page_path if params[:cancel]
end

要干净得多,因为你依赖于一个标志,而不是(可能)本地化的显示值。

button_to似乎是一种简单的方法来实现相同的,但它必须放在表单本身之外,但这可以很容易地固定与css。

同样,为了以一种更通用的方式解决这个问题(也适用于在尚未持久化的资源上编辑嵌套资源),您可以为cancel创建一个单独的表单,其中包含所有原始值作为隐藏字段。

简洁明了

<%= link_to "Cancel", show_page %>

最新更新