Forum: Italian Ruby user group Paginator e articoli random

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
luigi (Guest)
on 2007-04-26 17:23
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
Chiaro S. (Guest)
on 2007-04-26 17:33
(Received via mailing list)
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
Matteo V. (Guest)
on 2007-04-26 17:59
(Received via mailing list)
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
luigi (Guest)
on 2007-04-26 18:19
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
luigi (Guest)
on 2007-04-27 12:26
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.
luigi (Guest)
on 2007-04-28 21:09
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!
This topic is locked and can not be replied to.