Modificare le query ActiveRecord

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]

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.

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]

2014/1/12 FleX [email protected]
[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. :slight_smile:

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!