Route name - leggerlo nel controller

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

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. [email protected]

Luigi


Posted via http://www.ruby-forum.com/.


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


twitter: @riffraff
blog (en, it): www.riffraff.info riffraff.blogsome.com
work: circleme.com

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
Card: http://zerp.ly/ju-liu

Societ Cooperativa weLaika
Corso Vigevano 14/B, 10154 Torino (TO), Italy
http://welaika.com - [email protected]

2014/1/4 Luigi M. [email protected]

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

2014/1/13 maurizio de magnis [email protected]

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

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. [email protected]