Query: left join

Ciao a Tutti
ho questa query:

SELECT DIPENDENTI.PRG, TVISITA.DIPEND, COGNOME, NOME, DATA
FROM DIPENDENTI LEFT JOIN TVISITA ON (TVISITA.DIPEND=DIPENDENTI.PRG)
ORDER BY COGNOME, NOME

Io ho fatto così, è corretto?

@dipendenti = Dipendente.find(:all, :select => “dipendenti.prg, cognome,
nome, data”, :include => “Tvisita”, :order => “cognome, nome”)

Provandolo mi dà questo errore:
Association named ‘Tvisita’ was not found

Qualcuno mi può dire cosa sbaglio?

    Paolo

premetto che non ho mai usato :include, io i join li faccio
così.@comments = TravelComment.find(:all,
:conditions => [“travel_id = ?”,params[:id]],
:joins => “inner join users on user_id = users.id”)

o così, notare l’ “as w” che pur dichiarandolo nel joins lo usa anche in
conditions

@watching_rides = WatchingRide.find(:all,
:conditions => [“w.user_id = ?”,current_user.id],
:joins => “as w inner join rides on w.object_id = rides.id”)

Saluti Andrea

----- Original Message -----
From: [email protected]
To: “Ruby” [email protected]
Sent: Wednesday, December 06, 2006 2:04 PM
Subject: [ruby-it] QUERY: LEFT JOIN

Ciao a Tutti
ho questa query:

SELECT DIPENDENTI.PRG, TVISITA.DIPEND, COGNOME, NOME, DATA
FROM DIPENDENTI LEFT JOIN TVISITA ON (TVISITA.DIPEND=DIPENDENTI.PRG)
ORDER BY COGNOME, NOME

Io ho fatto così, è corretto?

@dipendenti = Dipendente.find(:all, :select => “dipendenti.prg, cognome,
nome, data”, :include => “Tvisita”, :order => “cognome, nome”)

Provandolo mi dà questo errore:
Association named ‘Tvisita’ was not found

Qualcuno mi può dire cosa sbaglio?

    Paolo

Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml

[email protected] writes:

Provandolo mi dà questo errore:
Association named ‘Tvisita’ was not found

Qualcuno mi può dire cosa sbaglio?

No. :include vuole il nome dell’associazione non quello del
modello. Semmai dovresti scrivere:

dipendenti = Dipendente.find(:all, :include => :tvisite)

ammesso che il tuo modello sia una cosa simile a:

class Dipendente < ActiveRecord::Base
set_primary_key ‘prg’
has_many :tvisite, :class_name => ‘TVisita’, :foreign_key => ‘dipend’


end

class TVisita < ActiveRecord::Base
belongs_to :dipendente, :class_name => ‘Dipendente’, :foreign_key =>
‘dipend’

end

e quindi potrai accedere a

dipendenti[3].tvisite[2].data

Per verificare che non mi sia confuso consulta la documentazione della
classe Associations nella sezione “eager loading”:

Ciao

Grazie dei suggerimenti,
sono riuscito a fare il left join … ma ho ancora un piccolo problema:

la QUERY è questa:

select dipendenti.prg, dipendenti.codutente, dipendenti.cognome,
dipendenti.nome, dipendenti.datanascita, aziende.nome
from aziende left join dipendenti on (aziende.prg=dipendenti.azienda)
order by dipendenti.cognome, dipendenti.nome

in RUBY diventa:

@azienda = Azienda.find(:all, :select => “dipendenti.prg,
dipendenti.codutente, dipendenti.cognome, dipendenti.nome,
dipendenti.datanascita, aziende.nome”, :joins => “left join dipendenti
on (aziende.prg=dipendenti.azienda)”, :order => “dipendenti.cognome,
dipendenti.nome” )

il LEFT JOIN funziona, il problema sta nella :select … così come l’ho
scritta lancia quest’eccezione:

ActiveRecord::StatementInvalid in AccettazioneController#risultati
FireRuby::FireRubyException: Error preparing a SQL statement.
Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 9
FROM
Invalid token
SQL Code = -104
Firebird Code = 335544569
: SELECT FROM aziende left join dipendenti on
(aziende.prg=dipendenti.azienda)

in pratica non capisce quali colonne prendere in considerazione (SELECT
FROM ).
Qual’è la sintassi corretta per la ":select => "?