2015-06-27 19 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