ruby-on-rails - Rails 验证错误未显示

标签 ruby-on-rails ruby validation error-handling

出于某种原因,我的验证错误正在被拾取但没有显示在页面上,因为我希望下面是我的模型和新 View 。我还将附上一张我的验证错误被拾取但未显示在 View 中的图片。

Model

class Review < ApplicationRecord
  belongs_to :user
  belongs_to :tea

  validates :title, presence: true
  validates :rating, numericality: {only_integer: true, greater_than_or_equal_to: 0, less_than: 11}
  validates :tea, uniqueness: {scope: :user, message: "has already been reviewed by you" }

  scope :order_by_rating, ->{group(:id).order('avg(reviews.rating) desc')}
end
View
<h1>Write a Review for  </h1>

<%= form_for Review.new do |f|%>
    <% if @review.errors.any? %>
        <h2>Errors:</h2>
        <ul>    
            <% @review.errors.full_messages.each do |message| %>
            <li><%= message %></li>
           <% end %> 
        </ul>
    <% end %>

Validation Error

最佳答案

在 Ruby 中有一个约定,方法以 ! 结尾。表示“危险”的方法。该方法要么改变其接收者,要么引发异常。 ActiveRecord::Persistence有正常和“危险”的方法:

  • savesave!
  • createcreate!
  • updateupdate!

  • 后者提出 ActiveRecord::RecordInvalid如果任何验证失败,则异常。当您从种子文件、测试或事务中创建记录时,这非常有用。

    但是,当您通常处理用户输入时,您希望使用正常的 save方法作为无效输入只是生活中的事实,而不是异常事件。如果您依赖将代码更改为 .save!对于调试,您应该真正学会使用 pry 或 byebug 来代替进入代码。

    您还应该修复表单,以便将其绑定(bind)到 @review实例变量,以便用户输入不会被删除。没有人喜欢糟糕的表单,这使得他们重新输入所有内容。
    <%= form_for @review.new do |f|%>
      # ...
    <% end %>
    

    关于ruby-on-rails - Rails 验证错误未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60875585/

    相关文章:

    ruby-on-rails - 如何使用带有 RSpec 的 send_file 方法测试下载图像?

    ruby-on-rails - 测试 rake 任务中定义的方法

    ruby-on-rails - as_json 不支持参数化方法

    验证全名的 Java 正则表达式只允许空格和字母

    javascript - 为什么我在自定义验证后无法输入 % 符号

    JavaScript - 表单中的 Bootstrap 选项按钮验证

    ruby-on-rails - 如何在 Heroku 部署期间运行 "grunt build"(angular 和 ruby​​-on-rails 应用程序)

    ruby - Ruby 中的/^ 符号是什么意思?

    ruby-on-rails - 构建匹配链接数组

    ruby-on-rails - 在 rails_admin 中获取登录用户关联记录