Forum: Italian Ruby user group Route name - leggerlo nel controller

598fadf49a8e63645edfb36cba7dc1c9?d=identicon&s=25 Luigi Maresca (luigi-s-w-net)
on 2014-01-04 18:39
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
1a45b192d0bbaf167afb43a41859e313?d=identicon&s=25 Ju Liu (Guest)
on 2014-01-04 18:54
(Received via mailing list)
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 - info@welaika.com


2014/1/4 Luigi Maresca <marluigi@libero.it>
E555a767a33427bfee0bb0878566293c?d=identicon&s=25 gabriele renzi (Guest)
on 2014-01-06 10:13
(Received via mailing list)
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 Maresca <marluigi@libero.it>

>
> Luigi
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
twitter: @riffraff
blog (en, it): www.riffraff.info riffraff.blogsome.com
work: circleme.com
598fadf49a8e63645edfb36cba7dc1c9?d=identicon&s=25 Luigi Maresca (luigi-s-w-net)
on 2014-01-12 21:26
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
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2014-01-13 10:08
(Received via mailing list)
Ciao Luigi,

dunque, dunque.

<digressione>
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.
</digressione>

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 Maresca <marluigi@libero.it>
Fb4482bd900141ed8bd3f3fcc3723f90?d=identicon&s=25 Luca Mearelli (Guest)
on 2014-01-13 10:23
(Received via mailing list)
2014/1/13 maurizio de magnis <maurizio.demagnis@gmail.com>
>
> <digressione>
> 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.
> </digressione>
>

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
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.