如何在rails视图上显示错误消息?

我是rails新手,想要在form字段上应用validation。

myviewsnew.html.erb

  
.....

Simulation.rb

 class Simulation  { :in => 1..25, :message => 'The row must be between 1 and 25' } end 

simulation_controller.rb

 class SimulationsController < ApplicationController def index @simulations = Simulation.all end def new end def create @simulation = Simulation.new(simulation_params) @simulation.save redirect_to @simulation end private def simulation_params params.require(:simulation).permit(:row) end 

我想检查模型类row字段的整数范围,如果它不在范围内,则返回错误消息。 我可以从上面的代码检查范围,但不能返回错误消息

提前致谢

关键是您正在使用模型表单,该表单显示ActiveRecord模型实例的属性。 控制器的创建操作将负责一些validation(并且您可以添加更多validation )。

当模型无法保存时,Controller会重新呈现new View

如下更改您的控制器:

 def new @simulation = Simulation.new end def create @simulation = Simulation.new(simulation_params) if @simulation.save redirect_to action: 'index' else render 'new' end end 

当模型实例无法保存( @simulation.save返回false )时,将重新呈现new视图。

new视图显示无法保存的模型的错误消息

然后在new视图中,如果存在错误,您可以像下面一样打印它们。

 <%= form_for @simulation, as: :simulation, url: simulations_path do |f| %> <% if @simulation.errors.any? %> <% @simulation.errors.full_messages.each do |message| %> 
  • <%= message %>
  • <% end %> <% end %>
    <%= f.label :Row %>
    <%= f.text_field :row, class: 'form-control' %>
    <% end %>

    这里的重要部分是您正在检查模型实例是否有任何错误,然后将其打印出来:

     <% if @simulation.errors.any? %> <%= @simulation.errors.full_messages %> <% end %> 

    做这个 –

      <%= form_for :simulation, url: simulations_path do |f| %> <% if f.object.errors.any? %> 
      <% if f.object.errors.each do |message| %>
    • <%= message %>
    • <% end %>
    <% end %> .......... <% end %>

    您只需将此代码添加到视图文件( myviewsnew.html.erb ):

     <%= error_messages_for :simulation %> 

    在http://apidock.com/rails/ActionView/Helpers/ActiveRecordHelper/error_messages_for中查看error_messages_for完整语法