我有一个使用 form_tag 助手工作正常的基本表单,但我想添加一个取消按钮,这样做的语法是什么?我希望取消按钮显示为按钮,而不是链接,然后将用户带到不同的 URL(表明他们不想提交表单)。
泰,弗雷德
我有一个使用 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>
,因为参数:commit
可能是本地化的,因此在控制器中进行评估会很痛苦。
Abutton_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 修复。
此外,为了以更通用的方式解决此问题(也适用于在尚未持久化的资源上编辑嵌套资源),您可以为取消创建一个单独的表单,其中包含所有原始值作为隐藏字段。