Skip to content
This repository has been archived by the owner on Nov 27, 2018. It is now read-only.

qcam/bootstrap_validator_rails

Repository files navigation

Bootstrap Validator Rails

Rails client side validation using BootstrapValidator Plugin: https://github.com/nghuuphuoc/bootstrapvalidator Bootstrap Form as the form builder. https://github.com/bootstrap-ruby/rails-bootstrap-form

Installation

gem install bootstrap_validator_rails

or add this to your Gemfile

gem 'bootstrap_validator_rails', '~> 1.1.0'

then run

bundle install

Usage

Add this to your application.js

//= require bootstrapValidator
//or
//= require bootstrapValidator.min

and your application.css

/*= require bootstrapValidator */
/* or */
/*= require bootstrapValidator.min */

In you model

class Product
  validates :name, presence: true
  validates :price, numericality: {greater_than: 20}
  validates :intro, length: {in: 50..200}
  validates :terms_of_service, acceptance: {on: :create} # only validates if new_record?
  validates :sku, format: {with: /\A[a-zA-Z]+\z/, message: "only allows letters"}
  # Thank Brian Cardarella for this: http://reefpoints.dockyard.com/ruby/2011/11/18/convert-ruby-regexp-to-javascript-regex.html
end

In your form

= bv_form_for(@product) do |f|
  = f.text_field :name
  = f.text_field :price

Please make sure to add the script

$(document).ready(function() {
  $('#your_form').bootstrapValidator();
});

Generated HTML

<input id='product_name' name='product[name]' data-bv-notempty='' data-bv-notempty-message='cannot be blank'/> 
<input id='product_price' name='product[price]' data-bv-greaterthan-inclusive='false' data-bv-greaterthan-value='20' />

ActiveRecord Message

activerecord:
  errors:
    models:
      post:
        attributes:
          title:
            blank: is required

Please see: http://guides.rubyonrails.org/i18n.html#error-message-scopes

List of helpers supported

  • color_field
  • date_field
  • datetime_field
  • datetime_local_field
  • email_field
  • month_field
  • number_field
  • password_field
  • phone_field
  • range_field
  • search_field
  • telephone_field
  • text_area
  • text_field
  • time_field
  • week_field
  • check_box

Please refer to Bootstrap Form: https://github.com/bootstrap-ruby/rails-bootstrap-forms

List of validators supported

  • presence
  • numericality
    • only_integer
    • greater_than
    • greater_than_or_equal_to
    • less_than
    • less_than_or_equal_to
    • odd
    • even
  • length
    • is
    • within
    • in
    • minimum
    • maxiumum
  • format
    • with: regular expression
  • acceptance
  • in progress ...

Using Simple Form, Formtastic, Rails Form?

Add this to your application.js

//= require bootstrapValidatorRails

And in your HAML/ERB

.my-awesome-form= simple_form_for @post do |f|
  = f.input :title

= bv_javascript_for @post

Actually bv_javascript_for generates script like this

//<![CDATA[
  $(document).ready(function() {
    bv_form('.bv_form', {"fields":{"post[title]":{"validators":{"notEmpty":{"message":"can't be blank"},"regexp":{"regexp":"^[a-zA-Z]+$","message":"only allows letters"}}},"post[price]":{"validators":{"step":{"message":"should be odd","base":1,"step":2}}},"post[accepted]":{"validators":{"notEmpty":{"message":"should be accepted"}}}}})
  });
//]]>

So make sure that you have added bv_form to your form classes

= simple_form_for @post, html: {class: 'bv_form'} do |f|
  = f.input :title

Please note that as BootstrapValidator jQuery plugin is based on Bootstrap so make sure that your form markup is following Bootstrap Form

<div class="form-group">
  <div class="checkbox">
    <label>
      <input type="checkbox" id="terms">
      Check yourself
    </label>
  </div>
</div>