2015-06-27 71 views
3

我是rails的新手,想在form的领域申请验证。如何在rails视图上显示错误消息?

myviewsnew.html.erb

<%= form_for :simulation, url: simulations_path do |f| %> 

<div class="form-group"> 
    <%= f.label :Row %> 
    <div class="row"> 
    <div class="col-sm-2"> 
     <%= f.text_field :row, class: 'form-control' %> 
    </div> 
    </div> 
</div> 
..... 

Simulation.rb

class Simulation < ActiveRecord::Base 
belongs_to :user 
validates :row, :inclusion => { :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场的整数范围模型类和如果它不在范围内,则返回错误消息。我可以从上面的代码检查范围,但不能提前返回错误信息

感谢

+0

http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_inclusion_of ...完成。 – zee

+0

@NullSoulException我正在做同样的事情。我想以 –

回答

6
error_messages_for完整语法

更改您的控制器像下面

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 

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

<%= form_for @simulation, as: :simulation, url: simulations_path do |f| %> 
    <% if @simulation.errors.any? %> 
    <% @simulation.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
    <% end %> 
    <% end %> 
    <div class="form-group"> 
    <%= f.label :Row %> 
    <div class="row"> 
     <div class="col-sm-2"> 
     <%= f.text_field :row, class: 'form-control' %> 
     </div> 
    </div> 
    </div> 
<% end %> 
+0

的形式显示错误消息我已经将我的控制器类添加到问题 在html文件中添加上述代码后,我得到了'<%的未定义方法错误':<%if @ simulation.errors 。任何? %>',因为它无法找到'@ simulation'参数 –

+0

编辑了我的答案'redirect_to @ simulation'你想用那条线做什么? – Burak

+0

仍然收到相同的错误 –

3

做到这一点 -

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

    .......... 
<% end %> 
+0

如果这里有一个额外的内容:'<%if f.object.errors.each do | message | %>'试图编辑,但它不到6个字符,所以我不会让我这样做。 – rii