如何使用布尔条件

时间:2017-04-26 20:25:39

标签: ruby-on-rails

所以我显然对布尔流程感到困惑,因为我每次遇到问题。注意:我正在教自己编程,你是我学习的唯一希望!我正在尝试定义一个方法来检查用户是否是管理员,这样我就可以在视图中显示某些对象,只有管理员足够简单......或者不是,由于某种原因,它不能识别我是管理员(当我是真的,我已经检查了!)。总而言之,我是个新人,所以对我很轻松!

我的用户和Blogpost模型都使用

helpers/sessions_helper

def current_user #determines if user is logged out or is the current user of the session/cookie of profile
  if (user_id = session[:user_id])
    @current_user ||= User.find_by(id: user_id)
  elsif (user_id = cookies.signed[:user_id])
    user = User.find_by(id: user_id)
    if user && user.authenticated?(cookies[:remember_token])
      log_in user
      @current_user = user
    end
  end
end

def current_user?(user)
  user == current_user
end

def is_an_admin
  if current_user && current_user.admin?
  end
end 

<div class="col-xs-12">
  <h1><%= @blogpost.title %></h1>
  <p><%= @blogpost.content %></p>
  <% if is_an_admin %>
    <%= link_to "Return to blog", blogposts_path %>
    <%= link_to "Edit Post", edit_blogpost_path, class: 'btn btn-primary' %> | 
    <%= link_to "Delete Post", blogpost_path(@blogpost), 
                method: :delete, data: {confirm: "Are you sure?"}, class: 'btn btn-danger' %>    
  <% else %>
    <%= link_to "Return to blog", blogposts_path %>
  <% end %>
</div>

我不确定我是否有错误的方法?我已经尝试将它放在我的应用程序控制器和我的用户控制器中无济于事。我一定错过了什么。

1 个答案:

答案 0 :(得分:1)

你的sintax搞砸了,但我认为你总是在is_an_admin方法上返回nil:

def is_an_admin
  if current_user && current_user.admin?
  end
end

如果条件为真,它什么都不做,所以它总是返回nil

将其更改为:

def is_an_admin?
  current_user and current_user.admin? # or shorter: current_user.try('admin?')
end