2016-03-31 16 views
0

session[:shopper] ayarlanmamışsa, sayfayı değiştirmek istiyorum, ancak session[admin] != "true" sayfaları da değiştirmek istiyorum. Diğer bir deyişle, session[:shopper] veya session[:admin] ayarlanmışsa, sayfayı görüntüleyin.Oturumda görünümle birlikte görünüm

if adresimin ilk ifadesini nasıl reddedebilirim?

İşte benim kod şimdiye kadar var:

<%if session[:shopper] %> (this is what I want to deny) 
    <%puts "shopper IS NIL----------------------------------------------"%> 
    <script type="text/javascript"> 
    window.location.href="/home" 
    </script> 
<%elsif session[:admin] != "true"%> 
<%puts "ADMIN is NIL----------------------------------------------"%> 
    <script type="text/javascript"> 
    window.location.href="/home" 
    </script> 
<%end%> 

cevap

3

bu sizin görünümde yapmak istediğim bir şey olduğuna emin misiniz? Kullanıcı, Javascript'i kapatarak bu mantığı atlatabilirmiş gibi görünüyor. Belki daha iyi denetleyicisi böyle bir şey yapmak: "sözdizimi hatası, beklenmedik keyword_elsif, .freeze 'keyword_end bekliyor; elsif oturum:

if session[:shopper].nil? 
    logger.info 'shopper is NIL' 
    redirect = true 
elsif session[:admin] != 'true' 
    logger.info 'ADMIN is NIL' 
    redirect = true 
end 

if redirect 
    redirect_to '/home' 
end 
+0

Javascript yönlendirme ile iyi nokta. Ayrıca html'nizi koşullu ifadelerinize de ekleyebilirsiniz. – Radmation

+0

Hata ayıklama için de 'logger' 'ın güzel kullanımı. "koyar" her zaman yararlı bir yere gitmez. – tadman

+0

Vay canına ... az önce kıçımı kurtardın ... teşekkürler! –

0

Onların bir yönetici veya eğer değilse ben yeniden yönlendirmek istediğiniz doğru anlamak Eh eğer blank? veya empty?

<% if session[:shopper].blank? %> (this is what I want to deny) 
    <%puts "shopper IS NIL----------------------------------------------"%> 
    <script type="text/javascript"> 
    window.location.href="/home" 
    </script> 
<% elsif session[:admin] != "true"%> 
<% puts "ADMIN is NIL----------------------------------------------"%> 
    <script type="text/javascript"> 
    window.location.href="/home" 
</script> 
<% end %> 
+0

Ben, ancak aşağıdaki hatayı alıyorum o çalıştı! [: Yönetici] = "true" " –

+0

@FredericoNovackAmaralPereir ifadesinin dışında bir <%end%> beklendiği gibi" boş "veya" boş "ifadesini" if "ile alabilirsiniz. – dp7

+0

@FredericoNovackAmaralPereir '' 'elsif' almazsa, sadece 'else' alır. – dp7

0

ile if deneyebilirsiniz Alışverişçi olarak imzalanmamışlar mı? Bir bayrak ayarlayabilirim. Örneğin:

redirect = false; 

<%if session[:shopper] == nil || (defined? session[:shopper] == "nil") %> 

    <%puts "shopper IS NIL----------------------------------------------"%> 

    redirect = true; 

<%elsif session[:admin] != "true"%> 
    redirect = true; 
<%end%> 

<%if redirect == true %> 
    <script type="text/javascript"> 
    window.location.href="/home" 
    </script> 
<%end%> 

Onlar ise kalmak için olsun:

  1. bir yöneticisi bir müşteri olarak imzalanan ancak.
  2. Yönetici olarak değil, alışveriş yapan kişi olarak oturum açtı.
  3. Bir yönetici veya alışverişçi olarak oturum açmamış (ikisi de).
  4. hem yönetici hem de alışveriş yapan kişi olarak oturum açtı.

Diğer seçenekler:

session[:shopper].nil? 
+0

Test = == nil 'neredeyse her zaman yapmak için yanlış bir şey, ve' nil? 'önerdiğiniz gibi daha iyi bir plan. Ayrıca, çoğu zaman 'nil' ve 'false' arasındaki farkın alakasız olduğunu da eklerim, bu yüzden eğer (x) 'x (x.nil?) 'E tercih edilirse' x 'değişmez olabilir FALSE. "Tanımlanmış" aramanın ne için olduğu açık değil. Gereksiz ve kafa karıştırıcı gibi görünüyor. – tadman

İlgili konular