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.
51bb5688c8c2c1b68d03c56da8e0b696?d=identicon&s=25 Alfredo Gama (alfredogz)
on 2007-02-21 04: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??
C64e63b70be7dfed8b0742540b8b27e5?d=identicon&s=25 Mark Reginald James (Guest)
on 2007-02-21 05:45
(Received via mailing list)
Alfredo Gama 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.
51bb5688c8c2c1b68d03c56da8e0b696?d=identicon&s=25 Alfredo Gama (alfredogz)
on 2007-02-21 14:11
Mark Reginald James wrote:
> Alfredo Gama 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??
C64e63b70be7dfed8b0742540b8b27e5?d=identicon&s=25 Mark Reginald James (Guest)
on 2007-02-21 14:55
(Received via mailing list)
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.

--
We develop, watch us RoR, in numbers too big to ignore.
51bb5688c8c2c1b68d03c56da8e0b696?d=identicon&s=25 Alfredo Gama (alfredogz)
on 2007-02-21 17:04
Mark Reginald James wrote:
> 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.
>
> --
> 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
C64e63b70be7dfed8b0742540b8b27e5?d=identicon&s=25 Mark Reginald James (Guest)
on 2007-02-22 00:26
(Received via mailing list)
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 }

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