在视图中使用if-else的问题

时间:2015-03-28 02:45:37

标签: ruby-on-rails ruby

我正在关注railsstutorial,现在已经进入了标题将根据用户是否登录而动态变化的点,使用条件下拉列表,如下所示

<header class="navbar navbar-fixed-top navbar-inverse">
<div class="container">
<%= link_to "sample app", root_path, id: "logo" %>
<nav>
  <ul class="nav navbar-nav navbar-right">
    <li><%= link_to "Home", root_path %></li>
    <li><%= link_to "Help", help_path %></li>
    <% if logged_in? %>
      <li><%= link_to "Users", '#' %></li>
      <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
          Account <b class="caret"></b>
        </a>
        <ul class="dropdown-menu">
          <li><%= link_to "Profile", current_user %></li>
          <li><%= link_to "Settings", '#' %></li>
          <li class="divider"></li>
          <li>
            <%= link_to "Log out", logout_path, method: "delete" %>
          </li>
        </ul>
      </li>
    <% else %>
      <li><%= link_to "Log in", login_path %></li>
    <% end %>

  </ul>
</nav>

这是logged_in?帮助器中定义的方法

module SessionsHelper

# Logs in the given user.
def log_in(user)
 session[:user_id] = user.id
end

# Returns the current logged-in user (if any).
 def current_user
  @current_user ||= User.find_by(id: session[:user_id])
 end

# Returns true if the user is logged in, false otherwise.
 def logged_in?
  !current_user.nil?
 end
end

由于某些原因,这不起作用,尽管我已经完全复制了教程。我不确定是否未调用行(if_logged_in?)或调用它但返回false。 else块以

的方式执行

我想知道无论如何我可以检查帮助器中定义的方法(logged_in?)是否正常工作并被正确调用?比如打印方法本身的输出?

1 个答案:

答案 0 :(得分:0)

检查该方法是否被调用以及其中发生了什么的快速方法是在其中抛​​出调试语句,如下所示:

def logged_in?
  Rails.logger.debug("\n\n *** logged_in? #{current_user}")
  !current_user.nil?
end

您加载页面,然后查看开发日志,看看该行是否存在,以及用户是否存在。

有关调试的更多详细信息,请参阅http://guides.rubyonrails.org/debugging_rails_applications.html

希望有所帮助。