我是编程新手,我正在努力工作。我正在尝试构建小型应用程序,但我很困惑这个问题。我一直在改编 Michael Hartl 教程来构建应用程序,但我想我遗漏了一些东西。
下面我已经分解了代码的相关部分(希望如此),我希望能帮助我解决问题所在。
错误是:
nil:NilClass 的未定义方法“用户名”
指出我在尝试在主页上显示注册表单部分之前遇到了类似的错误可能很有用。这是通过以下方式解决的:
<%= render :partial => 'users/new', :locals => { :user => @user ||= User.new } %>
在这种情况下做同样的事情确实消除了错误,但该应用程序的行为就像我已登录但不允许我退出或与任何功能交互。
我尝试了上述的各种变体,包括:@current_user => current_user 等
有人可以解释我做错了什么,因为我似乎做错了什么!
谢谢。
用户控制器
class UsersController < ApplicationController
before_filter :signed_in_user, only: [:show]
before_filter :correct_user, only: [:show]
before_filter :admin_user, only: [:index, :destroy]
def index
@users = User.paginate(page: params[:page])
end
def show
@user = User.includes(:video_posts).find(params[:id])
@video_posts = @user.video_posts.paginate(page: params[:page])
end
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render :template => 'static_pages/home'
end
end
视频发布控制器
class VideoPostsController < ApplicationController
before_filter :signed_in_user
def create
end
def destroy
end
end
会话控制器
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:session][:email])
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_back_or user
else
flash.now[:error] = "Invalid email/password combination"
render 'new'
end
end
def destroy
sign_out
redirect_to root_path
end
end
会话助手
module SessionsHelper
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def current_user?(user)
user == current_user
end
end
STATICPAGES > ROOT TO HOME
<%= render :partial => 'shared/user_info', :locals => { :current_user => current_user } %>
/共享文件夹中的一部分
<h2><%= current_user.username %></h2>
<span><%= link_to "view profile", current_user %></span>
<span><%= pluralize(current_user.video_posts.count, "video_post") %></span>