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!

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs