No commit activity in last 3 years
No release in over 3 years
A library for validating model association existence.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

ValidatesExistence

This plugin library adds ActiveRecord models a way to check if a :belongs_to association actually exists upon saving.
This is achieved via adding a validates_existence_of validator to the base validations module.
It also supports :allow_nil => true/false, :allow_new => true/false, and :polymorphic => true associations.

Version 0.4.0 also adds Rails 3 support (the appropriate version is used automatically). Version 0.5.0 introduces a new option - :both and changes the default behaviour of error attaching.

Changes in 0.5.3

Cleaned up the code, the whole library is now in one file with separate modules for Rails 2 and Rails 3. Also renamed should_macros folder to shoulda.

Changes in 0.5.0

In verions prior to 0.5.0 the error message was attached to the field which the validation was defined on. For example if the validation was on :relation_id field, then the error was accessible via object.errors.on(:relation_id). The new default behaviour is attaching the error on both fields: :relation and :relation_id for convenience. This functionality can be controlled through the :both option, which accepts true/false value and defaults to true.

TODO

  • replace T::U tests with RSpec
  • create RSpec Matcher
  • separate set of tests for Rails 3

Installation

First install the gem: sudo gem install validates_existence

Rails 2.x

# environment.rb
config.gem "validates_existence", :source => "http://rubygems.org"

Rails 3

# Gemfile
gem "validates_existence", ">= 0.4"

Example usage

Rails 2.x

class Pony < ActiveRecord::Base
  belongs_to :wizard
  belongs_to :person, :polymorphic => true

  validates_existence_of :wizard_id
  validates_existence_of :wizard      #works both ways

  validates_existence_of :wizard, :both => false

  validates_existence_of :person, :allow_nil => true
end

pony = Pony.new
pony.wizard_id = 100 # such wizard does not exist ofcourse
pony.valid?

pony.errors.on(:wizard) #=> "does not exist"

Rails 3

class Unicorn < ActiveRecord::Base
  belongs_to :wizard
  belongs_to :person, :polymorphic => true

  validates :wizard,    :existence => true
  validates :wizard_id, :existence => true # works both way
  validates :person,    :existence => { :allow_nil => true, :both => false }

  # the old method is supported also
  validates_existence_of :wizard
end

I18N

The default error message is does not exist.
This can be customized via Rails I18N like any other validation error message via :existence key.

Example

This would be your customized en.yaml:

en:
  activerecord:
    errors:
      messages:
        existence: "has gone missing!"

Contributing

Big thanks to Tanel Suurhans, Tarmo Lehtpuu, Josh Susser and all the contributors! We appreciate all your work on new features and bugfixes.

Credits

Validates Existence is created and maintained by PerfectLine, LLC.

License

Validates Existence is Copyright © 2009-2014 PerfectLine, LLC. It is free software, and may be redistributed under the terms specified in the LICENSE file.