【发布时间】:2015-06-28 09:41:07
【问题描述】:
我创建了一个具有简单登录身份验证的应用程序,它实际上是一个 twitter 克隆。用户登录并访问页面等。
但是当用户从那里发布一些个人资料时。它给出了一个错误
NoMethodError in RibbitsController#create
undefined method `id=' for nil:NilClass
错误在第 5 行左右:
class RibbitsController < ApplicationController
def create
@ribbit = Ribbit.create(user_ribbits)
@ribbit.userid = current_user.id
if @ribbit.save
redirect_to current_user
else
flash[:error] = "Problem!"
redirect_to current_user
end
end
private
def user_ribbits
params.require(:ribbit).permit(:content, :userid)
end
end
给应用的请求:
Request
参数:
{"utf8"=>"✓",
"authenticity_token"=>"dwVmjDNO4GOowphGFgChMDBxBfvka+M/xSUHvJMECzwxtv4NF6OuWtiaX74NLz91OwQJ9T9+wm7yMiPQ0BLpGA==",
"ribbit"=>{"content"=>"hi. test.\r\n"},
"commit"=>"Ribbit!"}
会话控制器:
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_username(params[:username])
if user && user.authenticate(params[:password])
session[:userid] = user.id
redirect_to rooturl, notice: "Logged in!"
else
flash[:error] = "Wrong Username or Password."
redirect_to root_url
end
end
def destroy
session[:userid] = nil
redirect_to root_url, notice: "Logged out."
end
end
用户控制器:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.create(user_params)
if @user.save
session[:user_id] = @user.id
redirect_to @user, notice: "Thank you for signing up!"
else
render 'new'
end
end
def show
@user = User.find(params[:id])
@ribbit = Ribbit.new
end
private
def user_params
params.require(:user).permit(:name, :username, :email, :password, :password_confirmation, :avatar_url)
end
end
还有应用程序控制器
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
end
如果你们能提供帮助,我将不胜感激!
谢谢。
【问题讨论】:
-
你确定你的
Ribbit被拯救了吗? -
不确定是不是这个原因,但您同时使用了
:userid和:user_id。可能想坚持user_id,因为使用这种外键名很常规 -
尝试将调试器放在
RibbitsContoller的create操作中,看看你是否在那里得到current_user -
另外,你确定你给出了正确的错误信息吗?您正在尝试调用
userid=方法而不是id=。 -
我认为,session[:user_id] 没有定义
标签: ruby-on-rails ruby methods