# Come ottenere controller,action e id

**URL:** <https://www.ruby-forum.com/t/come-ottenere-controller-action-e-id/134303>\
**Category:** IT\
**Created:** [April 9, 2008, 6:32pm UTC](https://www.ruby-forum.com/t/come-ottenere-controller-action-e-id/134303 "2008-04-09T18:32:39Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [April 9, 2008, 6:32pm UTC](https://www.ruby-forum.com/t/come-ottenere-controller-action-e-id/134303/1 "2008-04-09T18:32:39Z")

</div>

Ciao, mi ritrovo ad affrontare un altro problema  
(a breve vi mostrerÃ² come sto applicando i vostri preziosi consigli nel  
dominio che ho appena registrato)

Faccio un esempio, l’utente sta navigando quÃ :  
home/show/10

se fa un operazione particolare il :before\_filter devia l’indirizzo alla  
pagina di login, io vorrei che una volta finito il login si torni  
all’operazione che si intendeva fare quindi vorrei memorizzare quell’  
home/show/10.

Come faccio all’interno del controller a sapere: controller, action e id  
correnti?

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [April 9, 2008, 6:36pm UTC](https://www.ruby-forum.com/t/come-ottenere-controller-action-e-id/134303/2 "2008-04-09T18:36:22Z")

</div>

On Apr 9, 2008, at 6:32 PM, Marco M. wrote:

> all’operazione che si intendeva fare quindi vorrei memorizzare quell’  
> home/show/10.
> 
> Come faccio all’interno del controller a sapere: controller, action  
> e id  
> correnti?

nel filtro:

session[:return\_page] = request.env[“HTTP\_REFERER”]

dopo il login

redirect\_to session[:return\_page] || “/” (o qualche altra pagina di  
default)

S.

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [April 9, 2008, 6:56pm UTC](https://www.ruby-forum.com/t/come-ottenere-controller-action-e-id/134303/3 "2008-04-09T18:56:23Z")

</div>

Stefano C. wrote:

> redirect\_to session[:return\_page] || “/” (o qualche altra pagina di  
> default)

Grazie mille, funziona benissimo e mi sei stato molto di aiuto! 🙂

Ho usato questa dicitura (mi stavano fregando le graffe)  
redirect\_to session[:return\_page] ||  
{:controller=\>“home”,:action=\>“index”}

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [April 9, 2008, 7:06pm UTC](https://www.ruby-forum.com/t/come-ottenere-controller-action-e-id/134303/4 "2008-04-09T19:06:33Z")

</div>

On Apr 9, 2008, at 6:56 PM, Marco M. wrote:

> Stefano C. wrote:
> 
> > redirect\_to session[:return\_page] || “/” (o qualche altra pagina di  
> > default)
> 
> Grazie mille, funziona benissimo e mi sei stato molto di aiuto! 🙂
> 
> Ho usato questa dicitura (mi stavano fregando le graffe)  
> redirect\_to session[:return\_page] ||  
> {:controller=\>“home”,:action=\>“index”}

se definisci esplicitamente la route:

map.home “home”, :controller =\> “home”  
[oppure (come penso sia il tuo caso)  
map.root :controller =\> “home”]

poi puoi scrivere:

redirect\_to session[:return\_page] || home\_url  
[oppure  
redirect\_to session[:return\_page] || root\_url]

cosi’ e’ molto piu’ efficiente (ed elegante)

S.

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [April 11, 2008, 11:08am UTC](https://www.ruby-forum.com/t/come-ottenere-controller-action-e-id/134303/5 "2008-04-11T11:08:34Z")

</div>

On Apr 11, 2008, at 10:56 AM, Marco M. wrote:

> Invece mi è poco chiara la prima che hai messo, anche dopo leggendo la  
> documentazione. Mi faresti qualche esempio con qualche parametro, tipo  
> se volessi mappare  
> questo :controller=\>“home”, :action=\>“show”, :id=\>1,  
> :altro=\>“pippo”

Cioe’ vorresti avere un url mappato su HomeController#show ma solo  
quando  
i parametri “id” e “altro” sono rispettivamente “1” e “pippo”?

map.connect “foo/:id/:altro”, :controller =\> “home”, :action =\> “show”,  
:requirements =\> {:id =\> /^1$/, :altro =\> /^pippo$/}

ma non sono sicuro di aver capito bene 🙂

S.

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [April 11, 2008, 10:56am UTC](https://www.ruby-forum.com/t/come-ottenere-controller-action-e-id/134303/6 "2008-04-11T10:56:08Z")

</div>

Stefano C. wrote:

> cosi’ e’ molto piu’ efficiente (ed elegante)
> 
> S.

Si uso il map.root o meglio, l’ho solamente disasteriscato ed ho messo  
il mio controller. Direi che in quella maniera Ã¨ molto piÃ¹ pulito.

Invece mi Ã¨ poco chiara la prima che hai messo, anche dopo leggendo la  
documentazione. Mi faresti qualche esempio con qualche parametro, tipo  
se volessi mappare questo :controller=\>“home”, :action=\>“show”, :id=\>1,  
:altro=\>“pippo”

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [April 11, 2008, 11:25am UTC](https://www.ruby-forum.com/t/come-ottenere-controller-action-e-id/134303/7 "2008-04-11T11:25:47Z")

</div>

Stefano C. wrote:

> ma non sono sicuro di aver capito bene 🙂
> 
> S.

Chiedevo solamente di creare delle chiamate statiche, non avevo capito  
che si potesse fare qualcosa di cosÃ¬ elaborato

E come richiamo quell’esempio che mi hai fatto, cosÃ¬ Ã¨ corretto?  
foo\_url(:id=\>1, :altro=\>“pippo”)

e se :requirements non Ã¨ true non effettua la chiamata? Se mi dici si, Ã¨  
molto fichissimo 🙂

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [April 30, 2008, 9:28am UTC](https://www.ruby-forum.com/t/come-ottenere-controller-action-e-id/134303/8 "2008-04-30T09:28:28Z")

</div>

Grazie Stefano, perÃ² c’Ã¨ ancora qualcosa che non mi Ã¨ chiara, questo  
delle routes Ã¨ un argomento che assimilo con difficoltÃ e credo che mi  
servirebbe una spiegazione/guida dalla base con esempi, conosci qualcosa  
di online?  
Anche un buon libro cartaceo potrebbe essere una soluzione.  
Qualcosa tipo questo:

> **[Beginners Tutorial: Routing in Rails 2.0 (with REST) – Part 1 of n](https://darynholmes.wordpress.com/2008/03/15/beginners-tutorial-routing-in-rails-20-with-rest-part-1-of-n/)**
>
> Part 2 About this series This is a series for beginners wanting to learn about routing in Rails 2.0. This first post is aimed at exploring the behaviour of routing in Rails. It examines what happen…

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [April 11, 2008, 11:43am UTC](https://www.ruby-forum.com/t/come-ottenere-controller-action-e-id/134303/9 "2008-04-11T11:43:56Z")

</div>

On Apr 11, 2008, at 11:25 AM, Marco M. wrote:

Piccola correzione, i requirements implicano sempre le ancore (^…$)  
per cui  
non vanno messe. Inoltre non c’e’ bisogno di specificare la  
chiave :requirements (tutte le  
chiavi associate a espressioni regolari vengono considerate dei  
requirement)

map.connect “foo/:id/:altro”, :controller =\> “home”, :action =\>  
“show”, :id =\> /1/, :altro =\> /pippo/

> Chiedevo solamente di creare delle chiamate statiche, non avevo capito  
> che si potesse fare qualcosa di così elaborato
> 
> E come richiamo quell’esempio che mi hai fatto, così è corretto?  
> foo\_url(:id=\>1, :altro=\>“pippo”)

Dato che la route non ha nome:

url\_for(:id =\> “1”, :other =\> “pippo”) # =\>  
[http://localhost:3000/foo/1/pippo](http://localhost:3000/foo/1/pippo)

(posto che non ci siano altre route che possano fare match senza  
specificare controller e/o action)

se avesse un nome, “foo\_url” sarebbe sufficiente

> e se :requirements non è true non effettua la chiamata? Se mi dici  
> si, è  
> molto fichissimo 🙂

Se tenti di generare un url non riconducibile a nessuna route viene  
lanciata un’eccezione.

S.
