可以以admin身份查看页面,但普通用户可以看到:" UsersController中的NoMethodError #show未定义的方法' PRESENT?'为零:NilClass"

时间:2015-10-11 00:29:32

标签: devise cancan ruby-on-rails-4.2

我是RoR的新手,我试图建立一个用户的个人资料页面。如果用户是管理员,他们可以查看所有用户,以及访问和编辑/更新每个用户的个人资料页面。我使用Devise和Cancan进行授权。

当我以管理员身份登录时,一切似乎都运行良好,但当我以普通用户身份登录时,我的个人资料页面出现以下错误:

UsersController#show中的NoMethodError 未定义的方法'现在?'为零:NilClass

如果我批评授权,事情似乎会好一点!在我的显示和编辑用户控制器的方法行,但然后注销似乎打破了我的个人资料页面的动态元素(包括管理页面)。我不知道该怎么办。

该项目可在以下网址找到:https://github.com/GBressler/esl-site

任何可以在这些问题上得到证明的帮助都会很大 赞赏。

这是我的用户控制器:

class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]

  def index
    if current_user.id == 1
      @users = User.all
    else
      render 'profile_page'
    end
 end

def show
  render 'profile_page'
  authorize! :show, @user
  @user = User.find(params[:id])
 current_user.first_name
end

def update
end

def edit
  authorize! :edit, @user
end

def destroy
end

private

def set_user
 @user = User.find(params[:id])
end


def user_params
  params.require(:user).permit(:id, :first_name, :last_name, :email,
  :username)
end
end

这是我尚未开发的编辑和个人资料页面的代码:     

<p><%= @user.username %></p>

这是管理员看到的索引页面的代码:

<h1>Listing users</h1>
<!-- START_HIGHLIGHT -->
<% if notice %>
<p id="notice"><%= notice %></p>
<% end %>
<!-- END_HIGHLIGHT -->

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Username</th>
      <th></th>
      <th></th>
   </tr>
  </thead>

 <tbody>
    <% @users.each do |user| %>
    <tr>
      <td><%= user.first_name %></td>
      <td><%= user.username %></td>
      <td><%= link_to 'Show', user %></td>
      <td><%= link_to 'Edit', edit_user_path(user) if can?(:edit,
      user)%></td>
      <td><%= link_to 'Destroy', user, method: :delete,
      data: { confirm: 'Are you sure?' } %></td>
     </tr>
    <% end %>
  </tbody>
</table>

1 个答案:

答案 0 :(得分:0)

我忽略了在我的CanCan ability.rb文件中添加User的授权。