大家好我是rails的新手,出于某些原因我一直收到错误
undefined method 'user' for nil:NilClass
。
我在底部贴了一个错误图片,我发布了下面的代码。
# registeredapps_controller.rb
class RegisteredappsController < ApplicationController
def create
@registeredapp = Registeredapp.new(registeredapp_params)
@registeredapp.user = current_user
unless RegisteredappPolicy.new(current_user, @registeredapp).create?
flash[:alert] = "not authorized"
redirect_to user_registeredapps_path(current_user.id)
end
if @registeredapp.save
flash[:notice] = "You successfully registered your app."
redirect_to user_registeredapp_path(current_user.id, @registeredapp.id)
else
flash.now[:alert] = "There was an error registering your app. Please try again."
render :new
end
end
政策(使用Pundit Gem)
# registeredapp_policy.rb
class RegisteredappPolicy
def initialize(user, registeredapp)
@registeredapp = registeredapp
@user = user
end
def create?
if @user.present?
@user = @registerdapp.user
else
false
end
end
以下是我的模特
# models/user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
def avatar_url(size)
gravatar_id = Digest::MD5::hexdigest(self.email).downcase
"http://gravatar.com/avatar/#{gravatar_id}.png?s=#{size}"
end
has_many :registeredapps
end
# models/registeredapp.rb
class Registeredapp < ApplicationRecord
belongs_to :user
has_many :events
end
答案 0 :(得分:1)
您的问题是实例变量@registeredapp
在RegisteredappPolicy
方法的create?
类中被拼错了。
目前是
def create?
if @user.present?
@user = @registerdapp.user
else
false
end
end
而初始化中定义的变量是@registeredapp
,你错过了e
答案 1 :(得分:0)
@registerdapp
是nil
@user = @registerdapp.user
使用try
@user = @registerdapp.try(:user)
或
def create?
if @user.present? && @registerdapp.present?
@user = @registerdapp.user
else
false
end
end
注意:您在end
方法
if else
的一个create?
答案 2 :(得分:0)
Rails约定通常是让模型名称如下:
User
及其对应的表名如:
users
在您的ActiveRecord :: Registeredapp中,您有:user
,请检查您是否应该:users
。