Nil的Unidentified方法'id':NilClass

时间:2014-03-24 22:24:30

标签: ruby-on-rails ruby activerecord

我试图加入amistad(友谊宝石),但我遇到了麻烦。

这是我的友谊创建控制器..

def create
invitee = User.find_by_id(params[:id])
if current_user.invite invitee
  redirect_to new_friend_path, :notice => "Successfully invited friend!"
else
  redirect_to new_friend_path, :notice => "Sorry! You can't invite that user!"
end
end

我在会话助手中定义了current_user(在Michael Hartl教程的帮助下)

def current_user
remember_token = User.encrypt(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end

我得到的错误是指向我控制器的这一行

if current_user.invite invitee

并且错误表明未定义的方法`id'为零:NilClass

我也尝试将友谊控制器的创建动作更改为

def create
invitee = User.find_by_id(params[:id])
if @current_user.invite invitee
  redirect_to new_friend_path, :notice => "Successfully invited friend!"
else
  redirect_to new_friend_path, :notice => "Sorry! You can't invite that user!"
end
end

一旦我这样做,似乎amistad的魔法被遗忘了,因为'邀请'调用未定义的方法错误。

正如您所知,我对RoR很新,并致力于整合宝石。

我很感激任何帮助让这个工作! 谢谢, Peege

2 个答案:

答案 0 :(得分:1)

我猜问题就在这一行:

invitee = User.find_by_id(params[:id])

发布您的创建网址,在看到您的创建请求网址之前。我只能猜测:也许没有id参数,请尝试:

invitee = User.find(params[:user_id])

答案 1 :(得分:1)

您收到该错误的原因是,未调用current_user SessionsHelper方法,而current_user被视为本地变量。

在控制器类中添加include SessionsHelper。因此,您的控制器可以访问current_user方法。

修改

params [:id]目前为零。更改代码如下:

 <%= link_to 'Add Friend', friends_path(id: @user.id), :method =>"post", class: "btn btn-default btn-success" %>