我这个问题已经困扰了一段时间。我正在建立一个包含用户和文章的博客。至此,已经创建了用户和文章,并添加了注册,登录和注销功能。
这是我的代码:
user_controller.rb:
class UsersController < ApplicationController
before_action :set_user, only: [:edit, :update, :destroy]
before_action :require_same_user, only: [:edit, :update]
def index
@users = User.all
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
flash[:success] = "Welcome to Alphablog, #{@user.username}"
redirect_to user_path(@user)
else
render 'new'
end
end
def edit
end
def update
if @user.update(user_params)
flash[:success] = "Your account has been successfully updated"
redirect_to user_path(@user)
else
render 'edit'
end
end
def show
end
private
def user_params
params.require(:user).permit(:username, :email, :password)
end
def set_user
@user = User.find(params[:id])
end
def require_same_user
if current_user != @user
flash[:danger] = "You can only edit your own account"
redirect_to root_path
end
end
end
问题似乎出在:users / show.html.erb,其中@ user.username中的用户名似乎无效。不知道为什么。重新查看了我所有的代码,但无济于事。
<h1 align="center">Welcome to <%= @user.username %>'s page</h1>
<h4 align="center"><%= @user.username %>'s articles</h4>
<%= render 'articles/article', obj: @user.articles %>
请帮助。
谢谢。
答案 0 :(得分:0)
@user
是nil
。您没有调用set_user
或以其他方式填充该变量,因此无法对其进行设置。您可能希望将:show
包含在您为以下各项运行的set_user
动作列表中:
before_action :set_user, only: [:edit, :update, :destroy]
应该成为
before_action :set_user, only: [:show, :edit, :update, :destroy]