# Cosa c'e' di sbagliato?

**URL:** <https://www.ruby-forum.com/t/cosa-ce-di-sbagliato/216714>\
**Category:** IT\
**Created:** [February 12, 2012, 12:41am UTC](https://www.ruby-forum.com/t/cosa-ce-di-sbagliato/216714 "2012-02-12T00:41:57Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![dubstep](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/cdc98d/32.png) [@dubstep](https://www.ruby-forum.com/u/dubstep)\
**Post date:** [February 12, 2012, 12:41am UTC](https://www.ruby-forum.com/t/cosa-ce-di-sbagliato/216714/1 "2012-02-12T00:41:57Z")

</div>

route.rb

match “/:layout” =\> “company@index”

in application\_controller ho:

before\_filter :authenticate\_user!  
rescue\_from DeviseLdapAuthenticatable::LdapException do |exception|  
render :text =\> exception, :status =\> 500  
end  
protect\_from\_forgery  
before\_filter :set\_layout

layout :specify\_layout

def specify\_layout  
if @current\_layout == :intra  
“intranet”  
elsif @current\_layout == :inter  
“internet”  
else  
“application”  
end  
end

def set\_layout  
if params[:layout] == “intraOp”  
session[:current\_layout] = :intra  
elsif params[:layout] == “interOp”  
session[:current\_layout] = :inter  
else  
session[:current\_layout] = nil  
end  
@current\_layout = session[:current\_layout]  
end  
end

in un altro controller ho:

skip\_filter :authenticate\_user!, :only =\> [:index, :show] unless  
@current\_layout.nil?

la condizione unless sembra che non venga presa in considerazione,  
c’e’ qualcosa che sbaglio?

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [February 12, 2012, 1:42pm UTC](https://www.ruby-forum.com/t/cosa-ce-di-sbagliato/216714/2 "2012-02-12T13:42:43Z")

</div>

2012/2/12 Fabrizio R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Non puoi passare unless in quel modo perch la condizione deve essere valutata al  
> momento della richiesta, non al momento della compilazione della classe.
> 
> Penso che tu possa passare una opzione :unless, ma non sono sicuro.
> 
> skip\_filter :authenticate\_user!, :only =\> [:index, :show], :unless =\> lambda {  
> @current\_layout.nil? }
> 
> oppure
> 
> skip\_filter :authenticate\_user!, :only =\> [:index, :show], :if =\> lambda {  
> !@current\_layout.nil? }

Pero’ non funziona lo stesso ☹

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [February 12, 2012, 1:55am UTC](https://www.ruby-forum.com/t/cosa-ce-di-sbagliato/216714/3 "2012-02-12T01:55:19Z")

</div>

Non puoi passare unless in quel modo perch la condizione deve essere  
valutata al momento della richiesta, non al momento della compilazione  
della classe.

Penso che tu possa passare una opzione :unless, ma non sono sicuro.

skip\_filter :authenticate\_user!, :only =\> [:index, :show], :unless =\>  
lambda { @current\_layout.nil? }

oppure

skip\_filter :authenticate\_user!, :only =\> [:index, :show], :if =\> lambda  
{ !@current\_layout.nil? }

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [February 12, 2012, 8:38pm UTC](https://www.ruby-forum.com/t/cosa-ce-di-sbagliato/216714/4 "2012-02-12T20:38:18Z")

</div>

Hai controllato se il valore di @current\_layout cambia?  
Solo l’opzione :if sia valida, unless non considerato. Inoltre userei  
uno ‘skip\_before\_filter’. E metterei un bel logger nel lambda o un raise  
per verificare se il valore cambia.

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [February 12, 2012, 11:46pm UTC](https://www.ruby-forum.com/t/cosa-ce-di-sbagliato/216714/5 "2012-02-12T23:46:08Z")

</div>

2012/2/12 Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> 2012/2/12 Fabrizio R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
> 
> > Hai controllato se il valore di @current\_layout cambia?  
> > Solo l’opzione :if sia valida, unless non considerato. Inoltre userei uno  
> > ‘skip\_before\_filter’.
> 
> skip\_before\_filter e’ deprecato in favore di skip\_filter in rails 3.  
> Comunque il problema e’ quel before\_filter :authenticate\_user! in  
> application\_controller che fa si che @current\_layout non venga settato  
> se non dopo aver eseguito o skippato authenticate\_user.

Mi correggo, la variabile @current\_layout viene valorizzata,  
evidentemente sembra che skip\_filter rifiuti i conditionals if e  
unless.

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [February 12, 2012, 9:05pm UTC](https://www.ruby-forum.com/t/cosa-ce-di-sbagliato/216714/6 "2012-02-12T21:05:00Z")

</div>

2012/2/12 Fabrizio R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Hai controllato se il valore di @current\_layout cambia?  
> Solo l’opzione :if sia valida, unless non considerato. Inoltre userei uno  
> ‘skip\_before\_filter’.

skip\_before\_filter e’ deprecato in favore di skip\_filter in rails 3.  
Comunque il problema e’ quel before\_filter :authenticate\_user! in  
application\_controller che fa si che @current\_layout non venga settato  
se non dopo aver eseguito o skippato authenticate\_user.
