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

时间:2017-02-10 02:12:57

标签: ruby-on-rails ruby web-development-server

我正在创建一个按钮,触发一个名为sell的操作,就像它说的那样,销售一个用户的东西。但是,用户必须在数据库(User.amount> 0)上具有大于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之后的空格是代码必须的位置。 我尝试阅读错误文档,但没有找到与此类情况相关的任何内容。

1 个答案:

答案 0 :(得分:0)

如果要在使用模型时重新创建验证消息,可以使用errors.add方法来实现此目的。在你的情况下,有些东西:

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

可能就是你要找的东西。这会在amount字段中添加一个错误,该错误会显示您在语言环境文件的错误部分中定义的greater_than错误消息。

然后,假设您具有显示这些错误消息的视图设置,您应该能够获得与使用表单时类似的所需结果。

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

如果您不想将错误链接到模型,则可以使用flash flash是一个变量,可以保存在视图中显示的会话中,因此您可以编写如下内容:

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

并且您可以在视图中访问闪存,如果您要重定向,则闪存正常,如果您要渲染视图,则需要使用flash.now