Paginator e articoli random


#1

Salve a tutti.
Non riesco a risolvere il seguente problema:
attraverso il paginator del
@guide_pages, @guides = paginate( :guides, :order=> ‘date desc’,
:per_page=>15)
visualizzo 15 articoli per pagina.
Ora di questi 15 e solo di questi me ne servono 5 random.
Ho provato a scrivere:
step=Guide.count-15*@guide_pages.current.number
@temp=Guide.find(:all,:offset=>step,:limit=>5,:order=>‘RAND()’)
però mi prende 5 articoli random non nell’intervallo offset - limit ma
anche oltre e , almeno io, mi aspetterei quello che effettivamente
voglio!

Grazie


#2

prova a farti il paginator a manina, usando la classe Paginator.
poi estrai i tuoi 15 articoli con Guide.find…etc…, ne prendi 5 a
caso di quei 15 ritornati e li passi al paginator.

dai un’occhiata alla documentazione di Paginator e ti sarà più chiaro.

On 4/26/07, luigi removed_email_address@domain.invalid wrote:

però mi prende 5 articoli random non nell’intervallo offset - limit ma
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml


– Kia

therubymine.com | be a miner


#3

On 4/26/07, luigi removed_email_address@domain.invalid wrote:

@temp=Guide.find(:all,:offset=>step,:limit=>5,:order=>‘RAND()’)
però mi prende 5 articoli random non nell’intervallo offset - limit ma
anche oltre e , almeno io, mi aspetterei quello che effettivamente
voglio!

Non ti funziona perché ogni volta che fai una query, l’ordinamento
–essendo
per l’appunto casuale-- cambia. Tu vuoi paginare rispetto a una
sequenza
casuale ma fissata! Allora potresti fare così: invece di fare order by
rand(), fai order by rand(n) dove n è un numero associato alla sessione
dell’utente (ad esempio il suo session id).

RAND(), RAND(N)

Returns a random floating-point value v in the range 0 <= v < 1.0. If
a constant integer argument N is specified, it is used as the seed
value, which produces a repeatable sequence of column values.

M

Grazie


#4

Ho risolto eh:
@guide_pages, @guides = paginate( :guides, :order=> ‘date
desc’,:conditions=>“public=true”, :per_page=>15)
@tot_guide=Guide.count
step=@tot_guide-(15)*@guide_pages.current.number+rand(9)
@key=Guide.find(:all,:offset=>step,:limit=>6,:order=> ‘date desc’)


In questo modo la funzione rand(9) mi restituisce un numero tra 0 e 9
casuale che cambia l’offset.


#5

Quella era una soluzione non robusta dato che con una pagina di meno di
2 articoli succedono casini.
Esiste una soluzione decisamente più efficace:

@key=@guides.sort_by{rand}

in questo modo sono molto più random di prima!


#6

Chiaro Scuro wrote:

prova a farti il paginator a manina, usando la classe Paginator.
poi estrai i tuoi 15 articoli con Guide.find…etc…, ne prendi 5 a
caso di quei 15 ritornati e li passi al paginator.

dai un’occhiata alla documentazione di Paginator e ti sarà °i?aro.

On 4/26/07, luigi removed_email_address@domain.invalid wrote:

però ­© prende 5 articoli random non nell’intervallo offset - limit ma
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml


– Kia

therubymine.com | be a miner

Ciao Kia,
potresti essere un attimino più preciso.
Ti faccio presente che il paginator mi serve per raccogliere gli
articoli per le pagine del sito,
la ricerca rand di 5 articoli della pagina per compilare le keywords.

Grazie