如何在视图中使用带语句的if语句

时间:2016-03-31 20:55:16

标签: ruby-on-rails ruby session

如果未设置session[:shopper],我想更改页面,但如果session[admin] != "true"我还想更改页面。

换句话说,如果设置了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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以ifblank?

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

答案 2 :(得分:0)

如果我理解正确,如果他们不是管理员或者他们没有以购物者身份登录,那么你想要重定向吗?试试defined?

我会设置一个标志。例如:

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

他们会留下来:

  1. 以购物者身份登录,但不是管理员。
  2. 以管理员身份登录,但不是购物者。
  3. 不是管理员或以购物者身份登记(均未)。
  4. 以管理员和购物者的身份签约。
  5. 其他选择:

    session[:shopper].nil?