Ruby on Rails:如何在form_tag中实现Cancel按钮

时间:2013-01-14 01:58:18

标签: ruby-on-rails ruby forms

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

TY, 佛瑞德

4 个答案:

答案 0 :(得分:25)

如果要清除/重置表单字段,请执行dchacke建议的操作。

但是,我通常希望取消按钮不能清除表单,但是要将我从表单中删除,这意味着我不打算提交表单。

如果您想要后者,我只需在您取消时为要转到的页面建立一个链接(或按钮),例如:

=link_to 'Cancel', my_page_path

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

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

然后将其添加到您的控制器:

before_filter :check_for_cancel, :only => [:create, :update]

def check_for_cancel
  if params[:commit] == "Cancel"
    redirect_to my_page_path
  end
end

答案 1 :(得分:24)

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

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

测试它,它工作正常并重置表单中的所有字段。

答案 2 :(得分:2)

我会建议使用<button>标记,而不是提交标记,因为参数: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

更清洁的imho,因为你依赖于一个标志而不是一个(可能)本地化的显示值。

答案 3 :(得分:1)

button_to似乎是实现相同目标的一种简单方法,但它必须放在表单本身之外,但可以使用css轻松修复。

此外,要以更通用的方式解决此问题(也用于编辑尚未保留的资源上的嵌套资源),您可以为取消创建单独的表单,其中包含所有原始值作为隐藏字段。