Forum: Ruby on Rails Problem extending ActiveRecord with custom validations

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
F05df05d7e52f4ad93cd0f9027818c75?d=identicon&s=25 gaveeno (Guest)
on 2008-12-09 20:05
(Received via mailing list)
I'm having a problem extending ActiveRecord with custom validations
based on the "Write Custom Validations" recipe from Advanced Rails
Recipes.  As far as I can tell, I've followed the instructions exactly
but for some reason this isn't working and it's driving me crazy.
I've tried making the methods in the custom validations module class
methods (self.validates...) as well as the way they are below (which
is the way they are in the instructions).

Any suggestions?

Thanks!
Gavin

***
lib/custom_validations.rb

module CustomValidations
  def validates_phone(*attr_names)
    attr_names.each do |attr_name|
      validates_format_of attr_name,
            :with => /^[\(\)0-9\- \+\.]{10,20} *[extension\.]{0,9} *
[0-9]{0,5}$/i,
            :message => "invalid"
    end
  end
  def validates_email(*attr_names)
    attr_names.each do |attr_name|
      validates_format_of attr_name,
            :with => /(^([^@\s]+)@((?:[-_a-z0-9]+\.)+[a-z]{2,})$)|(^$)/
i,
            :message => "invalid"
    end
  end
end
ActiveRecord::Base.extend(CustomValidations)

***
config/environment.rb

# Be sure to restart your server when you modify this file

# Uncomment below to force Rails into production mode when
# you don't control web/app server and can't set it the proper way
ENV['RAILS_ENV'] ||= 'production'

#normal environment.rb stuff

end

require 'custom_validations'

***
models/user.rb

class User < ActiveRecord::Base
  validates_email   :email
end

***
error from console when starting server

/vendor/rails/activerecord/lib/active_record/base.rb:1667:in
`method_missing': undefined method `validates_email' for #<Class:
0x31ac9c8> (NoMethodError)
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-12-09 20:10
(Received via mailing list)
On 9 Dec 2008, at 19:05, gaveeno wrote:

>
Have you tried requiring it from an initializer, not the bottom of
environment.rb ?

Fred
F05df05d7e52f4ad93cd0f9027818c75?d=identicon&s=25 gaveeno (Guest)
on 2008-12-09 20:18
(Received via mailing list)
Thanks Fred, that worked!  I created config/initializers/
custom_validations.rb and moved the require line there from the
environment.rb file.  It's not clear to me why this works, and it
seems like it's overkill to create a new file for this, but as long as
it works it's cool with me.

Thanks again.
-Gavin

On Dec 9, 11:09 am, Frederick Cheung <frederick.che...@gmail.com>
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-12-09 20:40
(Received via mailing list)
On Dec 9, 7:17 pm, gaveeno <gavin.to...@gmail.com> wrote:
> Thanks Fred, that worked!  I created config/initializers/
> custom_validations.rb and moved the require line there from the
> environment.rb file.  It's not clear to me why this works, and it

Short version: because it means the require will happen at the right
time.
Long version:
http://www.spacevatican.org/2008/11/21/environment...

Fred
F05df05d7e52f4ad93cd0f9027818c75?d=identicon&s=25 gaveeno (Guest)
on 2008-12-09 20:49
(Received via mailing list)
Thanks Fred, interesting blog post!

On Dec 9, 11:40 am, Frederick Cheung <frederick.che...@gmail.com>
This topic is locked and can not be replied to.