Forum: Italian Ruby user group Routing condizionato

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 M. (Guest)
on 2009-02-11 22:28
Avrei un altro problema, legato a quello di un mio post precedente
(http://www.ruby-forum.com/topic/178094#new):

per generare un URL spider-friendly ho nella view la seguente linea di
comando:
selection_url(:nation=>@nation,:category=>@category,:author=>@author)

dove selection_url è definito nel file routes.rb come segue:

map.selection
'libri/nazionalita/:nation/genere/:category/autore/:author/elenco.html',
:controller=>'book', :action=>'selection'

in tal modo possono essere generati degli url del tipo:

http://127.0.0.1:3000/libri/nazionalita/tutte/gene...

http://127.0.0.1:3000/libri/nazionalita/tutte/gene...

http://127.0.0.1:3000/libri/nazionalita/inglese/ge...

etc..

Sarebbe bello, però, nel caso in cui venga selezionata solo la categoria
o solo l'autore o solo la nazionalità o solo due di queste generare URL
del tipo:

http://127.0.0.1:3000/libri/genere/commedia.html

etc..

Mi ritrovo quindi a dover affrontare un problema simile a quello del
primo post dove cioè dovrei generare 8 condizioni if...end e altrettante
8 routes.

Che mi suggerite?

Grazie mille.

Luigi
Andrea R. (Guest)
on 2009-02-12 11:12
(Received via mailing list)
>
> 8 routes.
>
> Che mi suggerite?
>
>
La tua soluzione non sta in 8 if, ma nell'aggiunta di un semplice
parametro.
Quello di cui hai bisogno si chiama Shallow
Routes<http://ryandaigle.com/articles/2008/9/7/what-s-new...,
le quali fanno proprio quello di cui hai bisogno.

Ecco un esempio che dovrebbe riprendere il tuo caso.

  map.resources :nations, *:shallow => true* do |nation|
    nation.resources :genres do |genre|
      article.resources :authors
    end
  end

Aggiungendo la chiave :shallow => true, riesci ad ottenere quello che ti
serve. A dir la verità non l'ho mai provato, ma confido che questa
soluzione
sia proprio quella che ti serva. In questo modo puoi avere URL di
diversa
granularità come queste

  # URL completa
  /nations/all/genre/commedy/authors/all

  # URL parziale
  /authors/all
  /genre/commedy
  /nations/all

Facci sapere!

--
Andrea R., http://mikamai.com
Writing http://sensejs.wordpress.com/
Collaborating http://therubymine.it
Reading http://stacktrace.it
Andrea R. (Guest)
on 2009-02-12 11:13
(Received via mailing list)
>
Scusa, ho messo un article che non centra niente Ecco la versione che
dovrebbe andare

  map.resources :nations, *:shallow => true* do |nation|
    nation.resources :genres do |genre|
      genre.resources :authors
    end
  end



--
Andrea R., http://mikamai.com
Writing http://sensejs.wordpress.com/
Collaborating http://therubymine.it
Reading http://stacktrace.it
Luigi M. (Guest)
on 2009-03-21 16:58
Potreste essere un pò più espliciti perchè non riesco a farlo
funzionare.

In particolare cosa dovrei scrivere esattamente nel routes e nella view?

al momento sto utilizzando questo metodo:

routes.rb

ActionController::Routing::Routes.draw do |map|

map.selection
'libri/nazionalita/:nation/genere/:category/autore/:author/editore/:editor/elenco.html',
          :controller=>'book',
          :action=>'index'

....

end

dove se viene selezionata solo il genere l'url si presenta così:
http://127.0.0.1:3000/libri/nazionalita/tutte/gene...

ma sarebbe più bello così:

http://127.0.0.1:3000/genere/commedia.html

Grazie dell'aiuto

Luigi
This topic is locked and can not be replied to.