# \[Rails\] Problema di ereditarietÃ

**URL:** <https://www.ruby-forum.com/t/rails-problema-di-ereditarieta/172142>\
**Category:** IT\
**Created:** [July 15, 2009, 4:34pm UTC](https://www.ruby-forum.com/t/rails-problema-di-ereditarieta/172142 "2009-07-15T16:34:46Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [July 15, 2009, 4:34pm UTC](https://www.ruby-forum.com/t/rails-problema-di-ereditarieta/172142/1 "2009-07-15T16:34:46Z")

</div>

Ciao a tutti.  
Sto cercando di riprodurre un esempio dal mio libro di rails…  
Mi ritrovo con il mio controller…

class Prodotti \< ActiveRecord::Base  
validates\_presence\_of :Prodotto, :Descrizione  
validates\_numericality\_of :prezzo  
validates\_uniqueness\_of :Prodotto

```
   validate :prezzo_non_inferiore_a_un_centesimo

   protected #Metodo di controllo del prezzo

```

def prezzo\_non\_inferiore\_a\_un\_centesimo  
errors.add(:prezzo, ‘deve essere superiore a 0.01’) if prezzo.nil?  
|| prezzo \< 0.01  
end  
end

mi chiedevo come fosse possibile richiamare (ereditando dalla classe  
“Base”) direttamente metodi come “validates\_presence\_of” visto che in  
“Base” questi metodi non sono presenti (vedere anche il seguente link  
alle api).

> **[ActiveRecord::Base](https://api.rubyonrails.org/classes/ActiveRecord/Base.html)**
>
> Active Record Active Record objects don't specify their attributes directly, but rather infer them from the table definition with which they're linked.

ringrazio anticipatamente tutte le persone che mi risponderanno.

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [July 15, 2009, 5:02pm UTC](https://www.ruby-forum.com/t/rails-problema-di-ereditarieta/172142/2 "2009-07-15T17:02:57Z")

</div>

Base include il modulo Validations.

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [July 15, 2009, 6:02pm UTC](https://www.ruby-forum.com/t/rails-problema-di-ereditarieta/172142/3 "2009-07-15T18:02:32Z")

</div>

Luca G. wrote:

> Base include il modulo Validations.

Quindi, se non ho capito male:

1)Validation estende Validations::ClassMethods quindi ne eredita tutti i  
metodi  
2)Base include Validation  
3)Io posso usare i metodi di Validations::ClassMethods estendendo Base  
in questo modo:

Class Prodotti \< ActiveRecord::Base

giusto?

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [July 15, 2009, 6:06pm UTC](https://www.ruby-forum.com/t/rails-problema-di-ereditarieta/172142/4 "2009-07-15T18:06:43Z")

</div>

Il giorno 15 Luglio 2009 18.02, pezzuya …[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha  
scritto:

> giusto?  
> giusto.

pietro

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [July 15, 2009, 6:08pm UTC](https://www.ruby-forum.com/t/rails-problema-di-ereditarieta/172142/5 "2009-07-15T18:08:28Z")

</div>

Se non ricordo male dovrebbe essere:

1. Base include Validations
2. Viene invocato lo speciale metodo di callback “included” di  
Validations
3. All’interno di included viene eseguito extend su Base, passando  
Validations::ClassMethods come parametro

Tutto questo avviene quando ActiveRecord viene caricato, quando la tua  
classe estende Base, eredita quei metodi di classe.

Luca

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [July 16, 2009, 9:27am UTC](https://www.ruby-forum.com/t/rails-problema-di-ereditarieta/172142/6 "2009-07-16T09:27:54Z")

</div>

Grazie a tutti 😉
