Un aiuto per la ricerca di dati in un database

Scusate se faccio magari una domanda stupida ma sono totalmente nuovo di
ruby e ror.

Ho questo controller:

def show

@posts=Post.find(params[:id])

end

Che non fa altro che ricevere un id e caricare uno specifico post
tramite l’id passato.

Ora volevo caricare oltre al post anche i commenti relativi ad esso.

la tabella dei commenti ha una colonna chiamata “id_post” che serve per
specificare a quale post quel commento si riferisce.

Avevo pensato allora di fare una ricerca sul database usando la funzione
where.

Ad esempio @comments = Comment.where("id_post=’ 4 ’ ")

Cosi facendo non ho problemi, ritrovo tutti i commenti relativi al post
4. MA come faccio a rendere dinamica questa stringa? Dovrei in pratica
sostiruire al 4 il valore “params[:id]” .

ma in pratica come faccio? Devo concatenare params[:id]? c’è una
sintassi specifica?

Ciao!
non il metodo migliore quello che stai usando… consiglio di leggerti
un
po’ di informazioni sulle nested resources (belongs_to e has_many).
Comunque nel tuo caso credo che dovresti fare:

@comments=Comment.where(:id_post => params[:id])

fammi sapere se funziona!

J

Prova con
@comments = Comment.where(:post_id => params[:post_id])

Qui i riferimenti:

Il giorno 05 dicembre 2011 21:47, Jonas G. [email protected] ha
scritto:


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


Matteo C.
Ufficio Reti e Sistemi
Universit degli Studi di Ferrara
Tel. 0532 97 4153

Jonas G. wrote in post #1035230:

Ciao!
non il metodo migliore quello che stai usando… consiglio di leggerti
un
po’ di informazioni sulle nested resources (belongs_to e has_many).
Comunque nel tuo caso credo che dovresti fare:

@comments=Comment.where(:id_post => params[:id])

fammi sapere se funziona!

J

Grazie mille, funziona :slight_smile:

Si so che ci sono altri modi per farlo, ma prima di addentrarmi in cose
più complicate volevo imparare a fare le cose più semplici :smiley:

Grazie mille!

Bene!
Comunque guardando il post di Matteo ho realizzato che hai invertito
“post”
e “id”. Di solito la foreign key (che sarebbe la chiave che collega a
un’altra tabella, nel tuo caso i commenti ai post) scritta “post_id” e
non “id_post” come hai fatto tu. Pu sembrare una stupidata ma ricorda
che
rails lavora molto con le convenzioni e in alcuni casi da per scontato
che
tu faccia le cose in una determinata maniera.
Se utilizzi le convenzioni giuste (e le nested resources) per trovare i
commenti ti baster fare:

@comments = Post.find(params[:id]).comments

Se avessi utilizzato le nested resources il problema non si sarebbe
posto
perch Rails crea automaticamente la foreign_key corretta.

buon Railing :slight_smile:

J

Jonas G. wrote in post #1035238:

Bene!
Comunque guardando il post di Matteo ho realizzato che hai invertito
“post”
e “id”. Di solito la foreign key (che sarebbe la chiave che collega a
un’altra tabella, nel tuo caso i commenti ai post) scritta “post_id” e
non “id_post” come hai fatto tu. Pu sembrare una stupidata ma ricorda
che
rails lavora molto con le convenzioni e in alcuni casi da per scontato
che
tu faccia le cose in una determinata maniera.
Se utilizzi le convenzioni giuste (e le nested resources) per trovare i
commenti ti baster fare:

@comments = Post.find(params[:id]).comments

Se avessi utilizzato le nested resources il problema non si sarebbe
posto
perch Rails crea automaticamente la foreign_key corretta.

buon Railing :slight_smile:

J

Grazie mille per la precisazione :slight_smile:

Ho notato infatti che rails sfrutta tanto le convenzioni (non ti dico
quando ci ho impiegato a capire il singolare/plurale nei
controller/model), buono a sapersi!

Gentilissimo!

Il giorno 05 dicembre 2011 22:55, Jonas G. [email protected] ha
scritto:

Bene!
[…]

@comments = Post.find(params[:id]).comments

Jonas,
attenzione che come hai scritto hai il problema delle n+1 query. In
questi
casi consiglio di usare include:

@comments = Post.includes(:comments).find(params[:id]).comments

ma forse qui stiamo andando troppo avanti per chi alle prime armi :wink:

J


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


Matteo C.
Ufficio Reti e Sistemi
Universit degli Studi di Ferrara
Tel. 0532 97 4153

Grazie! sono anche io alle prime armi ma ho pensato avrei imparato di pi
buttandomi nelle discussioni, e questa ne la prova :smiley: