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?