# Rails 3, Arel e rake

**URL:** <https://www.ruby-forum.com/t/rails-3-arel-e-rake/213899>\
**Category:** IT\
**Created:** [November 15, 2011, 5:09pm UTC](https://www.ruby-forum.com/t/rails-3-arel-e-rake/213899 "2011-11-15T17:09:38Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![luislavena](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@luislavena](https://www.ruby-forum.com/u/luislavena)\
**Post date:** [November 15, 2011, 5:09pm UTC](https://www.ruby-forum.com/t/rails-3-arel-e-rake/213899/1 "2011-11-15T17:09:38Z")

</div>

Ciao Bagai, volevo chiedervi se vi trovate bene con Arel? Io no, non  
lavora come secondo me dovrebbe e a me genera un pò di casini per cui  
sono tornato al vecchio ActiveRecord::Base.  
Premetto che generavo da semplici query fino ad unioni di più tabelle e  
raggruppamenti.  
Da console funziona tutto. Da script rake (0.9.2.2) stavo diventando  
matto, già il fatto che il risultato è differente la dice lunga. Arel  
non restituisce subito il risultato ma bensì l’oggetto della relazione,  
scomodo ma ci può stare. Il risultato viene restituito al primo accesso  
ad uno degli elementi. La cosa assurda del mio caso è che l’esecuzione  
del codice ha comportamenti che non riesco a prevedere, me ne sono  
successe tante che non saprei da dove iniziare, faccio solo un esempio  
cercando di  
semplificare:

#Sono dentro il ciclo “peppino” ed estraggo dei dati:  
agencies = Agency.select("#{Agency.table\_name}.id").joins(:setting =\>  
:convention).where("#{Convention.table\_name}.id =  
#{convention.id}").group("#{Agency.table\_name}.id")

#Non viene ancora eseguito nulla sul db.

#Controllo se c’è del risultato:  
next unless agencies.any?

#Viene eseguita una query col count e si prosegue perchè ci sono due  
records  
36m (0.0ms)[0m [1mEXEC sp\_executesql N’SELECT COUNT(agencies.id) AS  
ecc.

#vado avanti col codice:

num\_age += agencies.size

#genera il primo errore perchè tira fuori un valore molto alto, chissà a  
cosa si riferisce e come fa a tirarlo fuori, comunque qualcosa legato  
all’oggetto ActiveRecord::Relation più che al risultato estratto dal db

#toppa e vado avanti, devo generare la seconda query:  
records = Record.select(“company\_id, agency\_id, MIN([record\_date]) as  
‘record\_date\_from’”).where(:agency\_id =\> agencies.map(&:id),  
:record\_date =\> (‘2011-08-11’…‘2011-08-20’)).group(:company\_id,  
:agency\_id)

#Ora viene eseguita la prima query in modalità estesa:  
35mAgency Load (0.0ms)[0m EXEC sp\_executesql N’SELECT agencies.id FROM  
[agencies] ecc.

#Devo iniziare il ciclo  
records.each do |record|

#…altro errore  
Stack frame is not available

#ogni volta che mettevo una toppa ed andavo avanti mi scontravo con un  
nuovo errore ad esempio dovevo aggiornare dei record con l’id della  
relazione:  
records\_to\_update = Record.select(:id).where(:agency\_id =\>  
agencies.map(&:id), :record\_date =\> (‘2011-08-11’…‘2011-08-20’))

#naturalmente non ottengo ancora nulla

# creo l’oggetto subrecord della relazione e gli associo gli oggetti

della query precedente:  
subrecord \<\< records\_to\_update

“undefined local variable or method `save\_point\_records’ for  
main:Object”

#convertendo il tutto con ActiveRecord::Base funziona,  
come d’altronde è giusto che sia, il codice è corretto anche perchè  
prima di scrivere una procedura rake io testo step by step dentro la  
console.  
Sono sfortunato io o vi è capitato anche a voi qualcosa del genere?

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [November 15, 2011, 7:00pm UTC](https://www.ruby-forum.com/t/rails-3-arel-e-rake/213899/2 "2011-11-15T19:00:05Z")

</div>

Nel ricreare i problemi avuti, ho commesso un errore, questa la riga  
corretta:  
subrecord.records \<\< records\_to\_update

probabile che in questo caso arel non c’entri
