我是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>
答案 0 :(得分:0)
我忽略了在我的CanCan ability.rb文件中添加User的授权。