# Route name - leggerlo nel controller

**URL:** <https://www.ruby-forum.com/t/route-name-leggerlo-nel-controller/238336>\
**Category:** IT\
**Created:** [January 4, 2014, 6:39pm UTC](https://www.ruby-forum.com/t/route-name-leggerlo-nel-controller/238336 "2014-01-04T18:39:32Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![musicdenotation](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ea666f/32.png) [@musicdenotation](https://www.ruby-forum.com/u/musicdenotation)\
**Post date:** [January 4, 2014, 6:39pm UTC](https://www.ruby-forum.com/t/route-name-leggerlo-nel-controller/238336/1 "2014-01-04T18:39:32Z")

</div>

Salve a tutti,  
è possibile leggere, ad esempio in un controller, il nome della route  
che sis sta utilizzando?

Dato che ho una stessa vista, new\_programma, chiamata da due route  
diverse, software\_url e newprogramma\_url, ho necessità di sapere, nel  
mio controller, quale route sta utilizzando l’applicazione per chiamare  
la vista suddetta.

Grazie mille

Luigi

---

<div class="post-metadata">

**Author:** ![softwarewin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5f9b8f/32.png) [@softwarewin](https://www.ruby-forum.com/u/softwarewin)\
**Post date:** [January 6, 2014, 10:13am UTC](https://www.ruby-forum.com/t/route-name-leggerlo-nel-controller/238336/2 "2014-01-06T10:13:54Z")

</div>

a parte usare request.path c’ action\_name.

Ma onestamente io penso che vivi meglio se passi una variabile dal  
chiamante, in questo modo eviti di avere una dipendenza incrociata e se  
ad.es. cambi nome di una action chiamante non rompi niente.

2014/1/4 Luigi M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> Luigi
> 
> –  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).
> 
> * * *
> 
> Ml mailing list  
> removed\_email\_address@domain.invalid  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
twitter: @riffraff  
blog (en, it): www.riffraff.info [riffraff.blogsome.com](http://riffraff.blogsome.com)  
work: [circleme.com](http://circleme.com)

---

<div class="post-metadata">

**Author:** ![softwarewin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5f9b8f/32.png) [@softwarewin](https://www.ruby-forum.com/u/softwarewin)\
**Post date:** [January 4, 2014, 6:54pm UTC](https://www.ruby-forum.com/t/route-name-leggerlo-nel-controller/238336/3 "2014-01-04T18:54:46Z")

</div>

Ciao Luigi,

dovrebbe bastare

request.path

> 

nell’azione del controller per accedere al path da cui arriva la  
richiesta.  
In alternativa, dovresti poter accedere a

request.env[‘ORIGINAL\_FULLPATH’]

> 

per ottenere la stessa informazione.

```
Ju

```

## – M.Sc. Ju Liu Twitter: @arkh4m [http://twitter.com/arkh4m](http://twitter.com/arkh4m) Card: [http://zerp.ly/ju-liu](http://zerp.ly/ju-liu)

Societ Cooperativa weLaika  
Corso Vigevano 14/B, 10154 Torino (TO), Italy  
[http://welaika.com](http://welaika.com) - removed\_email\_address@domain.invalid

2014/1/4 Luigi M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![softwarewin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5f9b8f/32.png) [@softwarewin](https://www.ruby-forum.com/u/softwarewin)\
**Post date:** [January 12, 2014, 9:26pm UTC](https://www.ruby-forum.com/t/route-name-leggerlo-nel-controller/238336/4 "2014-01-12T21:26:06Z")

</div>

Scusate per la tarda risposta.  
request.path mi restituisce tutto l’url io invece vorrei il naming  
dell’url, cioé la parola “software” che sta in: match …  
as:=\>:software

Per variabile dal chiamante intendi un params nell’URL?  
se si, non posso cambiare l’url!

request.env[‘ORIGINAL\_FULLPATH’] mi restituisce la stessa cosa di  
request.path.

Grazie per l’aiuto

Luigi

---

<div class="post-metadata">

**Author:** ![softwarewin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5f9b8f/32.png) [@softwarewin](https://www.ruby-forum.com/u/softwarewin)\
**Post date:** [January 13, 2014, 10:23am UTC](https://www.ruby-forum.com/t/route-name-leggerlo-nel-controller/238336/5 "2014-01-13T10:23:43Z")

</div>

2014/1/13 maurizio de magnis [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> Ho la sensazione che il tuo problema possa essere risolto in altro modo. Mi pare strano che nel controller tu abbia una dipendenza con l'identificativo usato per definire la rotta.

credo anche io che rifattorizzare il codice possa essere preferibile in  
questo caso…  
Ad esempio, Luigi, se hai un solo controller/action che risponde alle  
due  
route diverse potresti estrarre in un modulo la funzionalita che non  
cambia  
tra loro, creare un controller separato per ciascuna route e includere  
in  
entrambi i controller il modulo, poi in ciascun controller potresti  
usare  
il codice estratto nel modulo per quello che e’ in comune nei due casi  
ma  
sapresti immediatamente a quale delle due routes stai rispondendo.

ciao,  
Luca

---

<div class="post-metadata">

**Author:** ![softwarewin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5f9b8f/32.png) [@softwarewin](https://www.ruby-forum.com/u/softwarewin)\
**Post date:** [January 13, 2014, 10:08am UTC](https://www.ruby-forum.com/t/route-name-leggerlo-nel-controller/238336/6 "2014-01-13T10:08:29Z")

</div>

Ciao Luigi,

dunque, dunque.

Ho la sensazione che il tuo problema possa essere risolto in altro modo. Mi pare strano che nel controller tu abbia una dipendenza con l'identificativo usato per definire la rotta.

Dunque.

Con un debugger (ho usato Pry), dentro l’action di un controller ho  
richiamato “caller” e nella lista dei chiamanti ho notato:

actionpack-4.0.2/lib/action\_dispatch/journey/router.rb:59:in `call’

> actionpack-4.0.2/lib/action\_dispatch/routing/route\_set.rb:680:in `call’

con

bundle open action\_dispatch

e ho notato in route\_set.rb:695 un codice che dopo qualche  
sperimentazione  
è diventato questa funzione che puoi inserire dentro  
ApplicationController  
ed usare all’interno delle action dei tuoi controller:

def current\_named\_route

> ```
> my_routes = []
> Rails.application.routes.router.recognize(request) do |route,
> 
> ```
> 
> \_matches, \_params|  
> my\_routes \<\< route.name  
> end  
> my\_routes  
> end

my\_routes è un array perché suppongo che #recognize possa effettuare più  
yield.

2014/1/12 Luigi M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
