0
我是编程新手,我正在通过rails的方式工作。我试图建立一个小应用程序,但我很困惑这个问题。我一直在调整Michael Hartl教程来构建应用程序,但我想我错过了一些东西。Rails呈现部分 - 继续获取未定义的方法无:NilClass
下面我已经分解了代码的相关部分(希望),并且希望能够帮助我们找出问题所在。
错误是:
未定义的方法`用户名”的零:NilClass
这可能是尝试显示的寄存器形式的局部上时前指出,我得到一个类似的错误有用主页。这是固定的:
<%= render :partial => 'users/new', :locals => { :user => @user ||= User.new } %>
做这次同样的事情不会删除错误,但我仿佛在签订,但不会让我登出或与任何的功能交互的应用程序的行为。
我已经试过上述的各种变化,包括:@current_user => CURRENT_USER等
有人能解释我做错了,因为它似乎,我不是做正确的事情!
谢谢。
users控制器
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
VIDEOPOST CONTROLLER
class VideoPostsController < ApplicationController
before_filter :signed_in_user
def create
end
def destroy
end
end
SESSIONS CONTROLLER
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
SESSIONS HELPER
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 } %>
PARTIAL IN A /共享文件夹
<h2><%= current_user.username %></h2>
<span><%= link_to "view profile", current_user %></span>
<span><%= pluralize(current_user.video_posts.count, "video_post") %></span>
转发您的答案我相信在技术上意味着,当他处于UserController的索引操作中时,他一定想要这样:'@user = current_user'这意味着当'index'行为被渲染后会得到current_user。他的问题是[:username]是零,他试图从一个零对象检索id键的值。 – David 2013-05-02 00:47:11
我不完全确定你在说什么。我对他的问题的解释是,他在他的偏好的第一行得到了例外,因为current_user是零,因为他的cookies中没有remember_token。我不确定这是正确的解释,但我也看不到涉及UsersController#索引。 – 2013-05-02 01:02:53
丹尼尔你是对的。非常感谢!这确实揭示了一些事情,但问题依然存在。我应该如何呈现部分? – JimmyBob 2013-05-02 01:12:15