我试图加入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
答案 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" %>