No commit activity in last 3 years
No release in over 3 years
validation error renderer for ajax request
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Runtime

>= 5.2.0
 Project Readme

AjaxErrorRenderer

Gem Version CircleCI

AjaxErrorRenderer is a validation error renderer for ajax request.

If you use turbolinks and form_with, you may need SJR(Server-generated JavaScript Responses) on validation errors. But it's a pain to add similar SJR code with every forms. AjaxErrorRenderer gives you render_ajax_error method to remove duplicated SJR.

Installation

Add this line to your application's Gemfile:

gem 'ajax_error_renderer'

And then execute:

$ bundle

Usage

First, include AjaxErrorRenderer in your controller like following.

class ApplicationController < ActionController::Base
  include AjaxErrorRenderer
end

Then you can use render_ajax_error method like following.

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(params.require(:user).permit(:name))
    if @user.save
      redirect_to users_path, notice: 'You created a user successfully!'
    else
      render_ajax_error model: @user
    end
  end
end

So error messages display within #error by default.

<%= form_with(model: @user) do |form| %>
  <div id="error">
    <%# Error Messages display here! %>
  </div>

  <div class="field">
    <%= form.label :name %>
    <%= form.text_field :name %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

If you want to display the messages in other place, you can do it by passing location option to render_ajax_error with css like following.

render_ajax_error model: @user, location: '.error_messages'

Scroll to error messages

If you have a large form, users can miss validation error messages because the messages display above user screen. To solve the problem, render_ajax_error method has move option to scroll to error messages. It defaults to true.

If you won't scroll, you can write like following.

render_ajax_error model: @user, move: false

Custom Template

You can create custome template with a generator like following.

./bin/rails g ajax_error_renderer:view

This generator command generates app/views/ajax_errors/_error.html.erb, and you can customize it freely.

To use another templates, you can use template argument.

render_ajax_error model: @user, template: 'critical_error'

Template app/views/ajax_errors/_critical_error.html.erb will use.

License

The gem is available as open source under the terms of the MIT License.