I am newbie in rails
and want to apply validation on form
fields.
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
I want to check the integer range of row
field in model class and return the error message if it's not in the range. I can check the range from above code but not able to return the error message
Thanks in advance
Do this -
You just need to add this code to the view file (
myviewsnew.html.erb
):Check complete syntax of
error_messages_for
in http://apidock.com/rails/ActionView/Helpers/ActiveRecordHelper/error_messages_forThe key is that you are using a model form, a form that displays the attributes for an instance of an ActiveRecord model. The create action of the controller will take care of some validation (and you can add more validation).
Controller re-renders
new
View when model fails to saveChange your controller like below:
When the model instance fails to save (
@simulation.save
returnsfalse
), then thenew
view is re-rendered.new
View displays error messages from the model that failed to saveThen within your
new
view, if there exists an error, you can print them all like below.The important part here is that you're checking whether the model instance has any errors and then printing them out: