Come ottenere controller,action e id

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?

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.

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! :slight_smile:

Ho usato questa dicitura (mi stavano fregando le graffe)
redirect_to session[:return_page] ||
{:controller=>“home”,:action=>“index”}

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! :slight_smile:

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.

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 :slight_smile:

S.

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”

Stefano C. wrote:

ma non sono sicuro di aver capito bene :slight_smile:

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 :slight_smile:

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:

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

(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 :slight_smile:

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

S.