# Rails: Come estrarre solo i campi calcolati da un modello?

**URL:** <https://www.ruby-forum.com/t/rails-come-estrarre-solo-i-campi-calcolati-da-un-modello/130465>\
**Category:** IT\
**Created:** [February 28, 2008, 2:46pm UTC](https://www.ruby-forum.com/t/rails-come-estrarre-solo-i-campi-calcolati-da-un-modello/130465 "2008-02-28T14:46:20Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [February 28, 2008, 2:46pm UTC](https://www.ruby-forum.com/t/rails-come-estrarre-solo-i-campi-calcolati-da-un-modello/130465/1 "2008-02-28T14:46:20Z")

</div>

Salve a tutti,

Ho una serie di modelli AR con dei campi calcolati, e l’esigenza di  
poterli “esportare” per mezzo dei metodi come to\_xml e/o to\_json. Esiste  
un modo  
agevole senza ricorrere a prefissi sugli stessi per individuarli nel  
“marasma” di “public\_methods”?

Avevo pensato a una cosa simile:

m1 = ActiveRecord::Base.public\_methods  
m2 = istanza\_del\_modello.public\_methods  
m3 = m2 - m1

Funzionicchia, nel senso che mi trovo m3 sfoltito dei metodi comuni di  
AR, tuttavia, ci sono altri metodi (es “lock!”) che mi inquinano il  
risultato.

Come ho detto vorrei, se possibile, evitare di aggiungere prefissi ai  
miei campi calcolati (es: “calc\_nome\_campo”). C’Ã¨ qualcosa che posso  
fare?

Ringrazio in anticipo.

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [February 28, 2008, 6:41pm UTC](https://www.ruby-forum.com/t/rails-come-estrarre-solo-i-campi-calcolati-da-un-modello/130465/2 "2008-02-28T18:41:28Z")

</div>

Carmine M. wrote:

> Salve a tutti,
> 
> Ho una serie di modelli AR con dei campi calcolati, e l’esigenza di  
> poterli “esportare” per mezzo dei metodi come to\_xml e/o to\_json. Esiste  
> un modo  
> agevole senza ricorrere a prefissi sugli stessi per individuarli nel  
> “marasma” di “public\_methods”?

Non sono sicuro di aver capito il problema: cosa intendi per campi  
calcolati? Che non esistono sul db ma sono il risultato di un count?  
Per quale motivo non puoi usare istanza\_del\_modello.columns?

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [February 29, 2008, 7:07am UTC](https://www.ruby-forum.com/t/rails-come-estrarre-solo-i-campi-calcolati-da-un-modello/130465/3 "2008-02-29T07:07:19Z")

</div>

S2 Akira wrote:

> Non sono sicuro di aver capito il problema: cosa intendi per campi  
> calcolati? Che non esistono sul db ma sono il risultato di un count?

Si esattamente, proprio campi/attributi che sono definiti nella classe  
“modello.rb” e non nella migration.

> Per quale motivo non puoi usare istanza\_del\_modello.columns?

PerchÃ¨ dal RDoc di RoR leggo:  
columns()  
Returns an array of column objects for the table associated with this  
class.

A me servirebbe poter, data una classe:

class modello \< ActiveRecord::Base

def campo\_calcolato  
campo\_del\_db \* 0,20  
end

end

Ed un’istanza x = modello.new

Vorrei che x.to\_json (ad esempio), mi restituisse anche  
“campo\_calcolato”.

Per il momento ho, mio malgrado, messo anche i campi calcolati nel DB.  
Tuttavia, nonostante l’occupazione complessiva sia davvero irrisoria, la  
cosa mi infastidisce.

Che faccio?

Grazie dell’aiuto.

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [February 29, 2008, 10:30am UTC](https://www.ruby-forum.com/t/rails-come-estrarre-solo-i-campi-calcolati-da-un-modello/130465/4 "2008-02-29T10:30:38Z")

</div>

Carmine M. wrote:

> PerchÃ¨ dal RDoc di RoR leggo:  
> columns()  
> Returns an array of column objects for the table associated with this  
> class.
> 
> A me servirebbe poter, data una classe:
> 
> class modello \< ActiveRecord::Base
> 
> def campo\_calcolato  
> campo\_del\_db \* 0,20  
> end
> 
> end
> 
> Ed un’istanza x = modello.new
> 
> Vorrei che x.to\_json (ad esempio), mi restituisse anche  
> “campo\_calcolato”.
> 
> Per il momento ho, mio malgrado, messo anche i campi calcolati nel DB.  
> Tuttavia, nonostante l’occupazione complessiva sia davvero irrisoria, la  
> cosa mi infastidisce.
> 
> Che faccio?
> 
> Grazie dell’aiuto.

Io farei cosÃ¬:

\<% a = Prova.find(1, :select =\> ‘tabella.\*, numero \* 0.2  
colonna\_calcolata’) %\>  
\<%= a.to\_json %\>

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [February 29, 2008, 11:52am UTC](https://www.ruby-forum.com/t/rails-come-estrarre-solo-i-campi-calcolati-da-un-modello/130465/5 "2008-02-29T11:52:48Z")

</div>

Carmine M. wrote:

> Ed anche io se ci fossi arrivato prima 🙂
> 
> GRAZIE 10000 del tuo aiuto.

figurati, per cosÃ¬ poco 🙂

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [February 29, 2008, 11:38am UTC](https://www.ruby-forum.com/t/rails-come-estrarre-solo-i-campi-calcolati-da-un-modello/130465/6 "2008-02-29T11:38:40Z")

</div>

S2 Akira wrote:

> Io farei cosÃ¬:
> 
> \<% a = Prova.find(1, :select =\> ‘tabella.\*, numero \* 0.2  
> colonna\_calcolata’) %\>  
> \<%= a.to\_json %\>

Ed anche io se ci fossi arrivato prima 🙂

GRAZIE 10000 del tuo aiuto.

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [February 29, 2008, 12:13pm UTC](https://www.ruby-forum.com/t/rails-come-estrarre-solo-i-campi-calcolati-da-un-modello/130465/7 "2008-02-29T12:13:42Z")

</div>

S2 Akira wrote:

> Carmine M. wrote:
> 
> > Ed anche io se ci fossi arrivato prima 🙂
> > 
> > GRAZIE 10000 del tuo aiuto.
> 
> figurati, per cosÃ¬ poco 🙂

sÃ¬ questo ti funiona se i campi calcolati sono semplici.

Per diverse ragioni in sviluppo ho spesso incontrato difficoltÃ nel  
creare funzioni/viste automatiche che si comportassero differentemente a  
seconda del tipo di campo di ar da estire o eventualmente della  
funzione.

Per ovviare a questo accompagno ogni nuovo model che genero con un  
oggetto che descrive metodi, campi etc, cosÃ¬ ad es se devo creare una  
form l’helper sa giÃ se un campo Ã¨ un has\_many, un belongs\_to, una  
function da ignorare nella form etc etc… posso anche esporre  
interfacce ad hoc in questo modo ad es so se un model mi fornisce un  
interfaccia particolare o cmq posso autogenerare chiamate etc…

In definitiva, non Ã¨ che ar o altro ti forniscano sempre tutta la pappa  
pronta… a volte se devi fare cose complesse devi scrivertele tu 🙂
