2016-03-31 5 views
0

session[:shopper]が設定されていない場合は、ページを変更したいが、session[admin] != "true"ページも変更したい場合。if文をビューで使用する方法

つまり、session[:shopper]またはsession[:admin]が設定されている場合は、ページを表示します。

ifの最初の陳述を拒否することはできますか?ここで

は、これまでの私のコードです:

<%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%> 

答えて

3

あなたはこれがあなたのビューでやりたいものですか? Javascriptをオフにしてこのロジックをバイパスできるかのように見えます。たぶん、あなたのコントローラ内でこのような何かを行うには良い:

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リダイレクトの良い点。条件文にHTMLをラップすることもできます。 – Radmation

+0

デバッグにも 'logger'を使います。 'puts'は必ずしもどこかに役立つとは限りません。 – tadman

+0

うわー...ちょうどここに私のお尻を保存した...ありがとう! –

0

あなたは私が正しくあなたを理解していれば、あなたは彼らが管理者または場合でない場合はリダイレクトしたいまあblank?または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

私はそれを試してみましたが、私は次のエラーを取得:「構文エラー、予期しないkeyword_elsif、keyword_end 」.freezeを期待して、ELSIFセッション![:管理者]を= "true" " unless文 –

+0

@FredericoNovackAmaralPereirの最後で<%end%>が期待されるので、'空白? 'か'空? 'を 'if'で手助けすることができます。 – dp7

+0

@FredericoNovackAmaralPereir 'unless'は' else'を取るのではなく 'elsif'を取っていません。 – dp7

0

ifを試すことができます彼らは買い物客としてサインインしていませんか?試してくださいdefined?

私はフラグを設定します。たとえば:買い物客ではなく、管理者としてログイン

  1. 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%> 
    

    彼らがある場合は滞在してもらいます。

  2. は管理者としてログインしましたが、買い物客ではありません。
  3. 管理者でも買い物客でもない(どちらも購入していない)。
  4. は、管理者と買い物客の両方としてサインオンしています。

その他のオプション:

session[:shopper].nil? 
+0

テスト '== nilはほとんど常に間違ったことですし、あなたが示唆しているように 'nil?'は良い計画です。また、ほとんどの場合、 'nil'と' false'の違いは無関係なので、 'x'がリテラルでないと' if(x.nil?) 'より' if(x)偽です。 「定義された」コールがここにあるのは明確ではない。冗長で紛らわしいようです。 – tadman

関連する問題