/ancestry_uniqueness

Provides a uniqueness validator for objects that are ordered in a tree using the ancestry gem.

Primary LanguageRubyMIT LicenseMIT

Gem Version

Ancestry uniqueness

Provides an activerecord uniqueness validator for objects that are ordered in a tree using the ancestry gem.

The gem is just a custom validator as described in the Rails guides.

Usage

After adding the gem to your project simply add ancestry_uniqueness: true as a parameter to the validates class method. E.g.:

class Page < ActiveRecord::Base
  has_ancestry

  validates :slug, ancestry_uniqueness: true
end

This makes sure the object doesn't pass validation when the attribute (slug in this case) isn't unique among the object's siblings (i.e. within the same parent).

With scope

If you want to scope your attribute pass a hash to ancestry_uniqueness like so:

class Page < ActiveRecord::Base
  has_ancestry

  validates :slug, ancestry_uniqueness: {scope: :some_attribute}
end

Compatibility

The gem depends on ancestry 2 or greater. It should work in Rails 3 and Rails 4 apps.

Currently it's only tested in a Rails 4.0.1 app.

Credits

I really should mention groe as I based this gem heavily on his code snippet.