2016-09-27 34 views
0

大家好我是新來導軌出於某種原因,我不斷收到一個錯誤Rails的未定義的方法'用戶」的零:NilClass

undefined method 'user' for nil:NilClass

我在底部粘貼了一個錯誤圖像,我發佈了下面的代碼。

Image Error

# 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 

策略(使用權威人士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

+0

你能否提供你的rails版本? –

+0

這是一個拼寫問題......檢查你的實例變量(詳見我的答案) –

+0

[未定義的方法\'用戶'爲nil:NilClass](http:// stackoverflow。com/questions/15383294/undefined-method-user-for-nilnilclass) –

回答

1

你的問題是,實例變量@registeredappRegisteredappPolicy類下create?法拼寫錯誤。

它目前是

def create? 
    if @user.present? 
    @user = @registerdapp.user 
    else 
    false 
    end 
end 

而在初始化中定義的變量是@registeredapp你錯過了一個e

+0

謝謝你指出,它的工作原理! –

0

@registerdappnil

@user = @registerdapp.user 

使用try

@user = @registerdapp.try(:user) 

def create? 
    if @user.present? && @registerdapp.present? 
    @user = @registerdapp.user 
    else 
    false 
    end 
end 

注:你也缺少了if else一個endcreate?方法

0

Rails約定通常是有這樣的型號名稱:

User 

及其對應表名如:

users 

在你的ActiveRecord :: Registeredapp中你有:user,請檢查你是否不應該有:users

相關問題