Forum: Italian Ruby user group Modificare le query ActiveRecord

0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 FleX (Guest)
on 2014-01-11 21:40
(Received via mailing list)
Utilizzo il seguente codice per popolare una tabella contenente un model
Movie che a sua volta contiene delle relazioni

movies = Movie.order("#{sort_column}")

def sort_column
    columns = %w[created_at author.name]
    columns[params[:iSortCol_0].to_i]
end


Quando provo a sortare sui campi del model Movie tutto funziona
correttamente e ActiveRecord esegue la query:

SELECT "movies".* FROM "movies"  ORDER BY created_at

ma se provo a sortare per il campo relazionato (author.name),
ActiveRecord non fa la Join delle tabelle e fallisce riportando il
seguente errore:

ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column:
author.name: SELECT  "movies".* FROM "movies" ORDER BY author.name

C'e' un modo per forzare ActiveRecord a fare una join o risolvere il
problema ?

--
FleX
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2014-01-11 23:16
(Received via mailing list)
Ciao Giuseppe,

nell'ipotesi che i models siano:

class Movie < ActiveRecord::Base
>   belongs_to :author
> end
> class Author < ActiveRecord::Base
> end


La query AR:

Movie.includes(:authors).order('authors.name')


esegue la query SQL:

SQL (0.2ms)  SELECT "movies"."id" AS t0_r0, "movies"."name" AS t0_r1,
> "movies"."author_id" AS t0_r2, "movies"."created_at" AS t0_r3,
> "movies"."updated_at" AS t0_r4, "authors"."id" AS t1_r0, "authors"."name"
> AS t1_r1, "authors"."created_at" AS t1_r2, "authors"."updated_at" AS t1_r3
> FROM "movies" LEFT OUTER JOIN "authors" ON "authors"."id" =
> "movies"."author_id" ORDER BY authors.name


ricorda che in 'authors.name' è presente il nome della tabella Author,
che
è quindi plurale.
0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 FleX (Guest)
on 2014-01-12 09:03
(Received via mailing list)
On 01/11/2014 11:16 PM, maurizio de magnis wrote:
>
> La query AR:
>
> Movie.includes(:authors).order('authors.name')
>

Ciao Maurizio,

le ipotesi sono corrette, cosi' come la soluzione al problema.
Unica cosa ho duto mettere il primo author al singolare :

Movie.includes(:author).order('authors.name')

Grazie 1.000, mi hai risolto un gran problema

--
FleX
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2014-01-12 20:26
(Received via mailing list)
2014/1/12 FleX <flex@programmareweb.com>
[cut]

> Unica cosa ho duto mettere il primo author al singolare :
>
> Movie.includes(:author).order('authors.name')
>

Dannato typo..

Grazie 1.000, mi hai risolto un gran problema
>

Bella. :-)
1e76d61797b05734404032c63d546666?d=identicon&s=25 Claudio Del Gusto (Guest)
on 2014-01-14 03:01
(Received via mailing list)
Salve a tutti, noi di Tascout stiamo cercando un backend developer che conosca 
ROR, per poter continuare lo sviluppo del nostro progetto e scalare. TASCOUT  un 
social network che consente a bambini e ragazzi lopportunit di mostrare il 
proprio talento in tutto il mondo senza barriere sociali, geografiche ed 
economiche e di entrare in contatto diretto con societ, procuratori e talent 
scout.
Siamo in procinto di lanciare la Beta e abbiamo gi chiuso collaborazioni molto 
importanti nel mercato dove agiamo.
Avremmo bisogno di un aiuto costante per 6 mesi almeno, (6h al giorno minimo)
Preferibile presenza su Roma.

Grazie ragazzi!
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.