validation: :if => ... does not work

Joshua Muheim
Sat, 28 Apr 2007 08:24:50 -0000

Hi all

I''ve got the following model:

class Link < ActiveRecord::Base
  attr_accessible :url,
    :name,
    :description,
    :editors_pick,
    :link_category_ids

  validates_presence_of :url
  validates_uniqueness_of :url
  validates_length_of :url,
    :maximum => 100
  validates_format_of :url,
    :with =>
/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ix,
    :if => Proc.new { |link| !link.errors.on(:url) }

  validates_presence_of :name
  validates_uniqueness_of :name
  validates_length_of :name,
    :maximum => 40

  has_and_belongs_to_many :link_categories,
    :join_table => :links_are_categorized_by_link_categories

  def before_validation
    name.capitalize! if name # Capitalize name!
    self.url = ''http://'' + self.url if !self.url.empty? and
self.url !~
/^http(s)?:\/\//
  end
end

I want only to check for the format of the url when there''s no other
error message for this attribute, so I added the :if => ... statement:

  validates_format_of :url,
    :with =>
/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ix,
    :if => Proc.new { |link| !link.errors.on(:url) }

Sadly this does not work: it displays both

    * Url is invalid
    * Url can''t be blank

when leaving its field blank. :-( What''s going wrong here?

Thanks for help, Josh

--
Posted via http://www.ruby-forum.com/.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---