Forum: Ruby on Rails validates_associated trouble

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.
Alfredo G. (Guest)
on 2007-02-21 05:26
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??
Mark Reginald J. (Guest)
on 2007-02-21 06:45
(Received via mailing list)
Alfredo G. wrote:
>   validates_associated :sire, :dam
> then when i save a new animal the validate doesnt work like this:
> 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.


--
We develop, watch us RoR, in numbers too big to ignore.
Alfredo G. (Guest)
on 2007-02-21 15:11
Mark Reginald J. wrote:
> Alfredo G. wrote:
>>   validates_associated :sire, :dam
>> then when i save a new animal the validate doesnt work like this:
>> 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.
>
>
> --
> We develop, watch us RoR, in numbers too big to ignore.

Thanks friend.

the problem is that in some cases an Animals has not father or mother,
then how can i do it??
Mark Reginald J. (Guest)
on 2007-02-21 15:55
(Received via mailing list)
Alfredo G. 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.

--
We develop, watch us RoR, in numbers too big to ignore.
Alfredo G. (Guest)
on 2007-02-21 18:04
Mark Reginald J. wrote:
> Alfredo G. 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.
>
> --
> We develop, watch us RoR, in numbers too big to ignore.

THanks a lot for your help,

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

i newbie in RoR sorry
Mark Reginald J. (Guest)
on 2007-02-22 01:26
(Received via mailing list)
Alfredo G. 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 }

--
We develop, watch us RoR, in numbers too big to ignore.
This topic is locked and can not be replied to.