validates_associated trouble

Alfredo Gama wrote:

hello friends,

I need to modelate a genealogical tree with:
animal,Dam(Mother) and Sire(Father)

the Dam and Sire are Animals then i modelate this:

class Animal < ActiveRecord::Base
  belongs_to :sire
  belongs_to :dam
  validates_associated :sire, :dam
end

class Sire < Animal
  has_many :animals
end

class Dam < Animal
  has_many :animals
end

then when i save a new animal the validate doesnt work like this:

i have the table Animals

ID, Name Father MOther
1 A - -
2 B - -

when I insert a new record like this

insert(3,C,1,2) its ok!
insert(3,C,5,7) its ok too, (the validates is doesnt work)

how can i solve this??

Use validates_presence_of instead of validates_associated.

Or use in addition to validates_associated if you want to
check some attributes of the associates.

Alfredo Gama wrote:

Use validates_presence_of instead of validates_associated.

the problem is that in some cases an Animals has not father or mother, then how can i do it??

This should allow clones if your foreign_keys are default NULL:

validates_presence_of :sire, :if => Proc { |animal| animal.sire_id }
validates_presence_of :dam, :if => Proc { |animal| animal.dam_id }

If instead they're default 0, the condition becomes

    animal.sire_id > 0

etc.

Alfredo Gama wrote:

validates_presence_of :sire, :if => Proc { |animal| animal.sire_id }

what is Proc?? i have to write the Proc method??

A Proc is a mini function that doesn't have a name. You can pass them
around as parameters to methods. See:

    http://www.ruby-doc.org/core/classes/Proc.html

Note that I incorrectly capitalized "proc". You instead
have to write either

   proc { |animal| animal.sire_id }

or

   Proc.new { |animal| animal.sire_id }