如何在操作中重新创建默认表单错误?

How to recreate the default form error but in a action?

我正在创建一个按钮来触发一个名为“sell”的操作,正如它所说,向用户出售东西。但是用户必须在数据库中拥有大于 0(东西)的数量(User.amount > 0),才能出售任何东西。我知道当用户将某些部分留空时,默认表单会出现一些错误消息。 (出现一条红色消息,不要让用户继续到下一页)。我正在尝试做类似的事情,不让用户转到销售页面,而是显示一条消息。这是我的卖出操作:

 def sell
  team_id = 9
 find_the_specific_row = current_user.user_stocks.find_by team: team_id

 if find_the_specific_row.nil? or find_the_specific_row == 0

 else
      find_the_specific_row.update(:amount => find_the_specific_row.amount - 1)
      redirect_to portfolios_path
  end
 end

if 后面的空白 space 是代码所在的位置。 我尝试阅读错误文档,但没有找到与这种情况相关的任何内容。

如果您希望在使用模型时重新创建验证消息,可以使用 errors.add 方法来实现。在您的情况下,类似于:

find_the_specific_row.errors.add(:amount, :greater_than, count: 0)

可能就是您要找的。这会向您的 amount 字段添加一个错误,该字段显示您在区域设置文件的错误部分中定义的 greater_than 错误消息。

然后,假设您已将视图设置为显示这些错误消息,您应该能够获得与使用表单时类似的预期结果。

看看 at working with validation errors here,它应该能够帮助您并提供更多关于在处理验证错误时可以做什么的信息。

如果您不想 link 模型的错误,那么您可以使用 flash.
flash 是一个变量,保存在会话中以显示在视图中,因此您可以这样写:

flash[:alert] = "Amount must be greater than 0" 

并且你可以在视图中访问flash,如果你是重定向,flash就可以,如果你是渲染视图,你需要使用flash.now