【问题标题】:Ruby on Rails : how to implement Cancel button in form_tagRuby on Rails:如何在 form_tag 中实现取消按钮
【发布时间】:2013-01-14 01:58:17
【问题描述】:

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

TY, 弗雷德

【问题讨论】:

  • 你想让它做什么?

标签: ruby-on-rails ruby forms


【解决方案1】:

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

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

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

【讨论】:

  • 抱歉应该更清楚,我不想重置字段,我取消以中止表单并转到不同的 url。
【解决方案2】:

如果您想清除/重置表单字段,请按照 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

【讨论】:

  • 以上是否会使取消链接显示为按钮?这就是我想要的。
  • 谢谢,看起来不错,我现在收到错误“ActionView::Template::Error (undefined method `button_tag' for #:0xb2a2e4d4>):”看起来不像 button_tag 元素?
  • 我可以使用submit_tag 来达到同样的目的。
【解决方案3】:

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

更简洁恕我直言,因为您依赖于标志而不是(可能)本地化的显示值。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-20
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      相关资源
      最近更新 更多