Ruby Forum Italian Ruby user group > Come ottenere controller,action e id

Posted by Marco Mastrodonato (marcomd)
on 09.04.2008 18:32
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?
Posted by Stefano Cobianchi (Guest)
on 09.04.2008 18:36
(Received via mailing list)
On Apr 9, 2008, at 6:32 PM, Marco Mastrodonato 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.
Posted by Marco Mastrodonato (marcomd)
on 09.04.2008 18:56
Stefano Cobianchi 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"}
Posted by Stefano Cobianchi (Guest)
on 09.04.2008 19:06
(Received via mailing list)
On Apr 9, 2008, at 6:56 PM, Marco Mastrodonato wrote:
> Stefano Cobianchi 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.
Posted by Marco Mastrodonato (marcomd)
on 11.04.2008 10:56
Stefano Cobianchi 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"
Posted by Stefano Cobianchi (Guest)
on 11.04.2008 11:08
(Received via mailing list)
On Apr 11, 2008, at 10:56 AM, Marco Mastrodonato 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.
Posted by Marco Mastrodonato (marcomd)
on 11.04.2008 11:25
Stefano Cobianchi 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 :)
Posted by Stefano Cobianchi (Guest)
on 11.04.2008 11:43
(Received via mailing list)
On Apr 11, 2008, at 11:25 AM, Marco Mastrodonato 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

(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.
Posted by Marco Mastrodonato (marcomd)
on 30.04.2008 09:28
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:
http://darynholmes.wordpress.com/2008/03/15/beginners-tutorial-routing-in-rails-20-with-rest-part-1-of-n/