Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未定义的方法`错误';for nil:NilClass用于显示Rails验证错误_Ruby On Rails_Validation - Fatal编程技术网

Ruby on rails 未定义的方法`错误';for nil:NilClass用于显示Rails验证错误

Ruby on rails 未定义的方法`错误';for nil:NilClass用于显示Rails验证错误,ruby-on-rails,validation,Ruby On Rails,Validation,在尝试从Rails中的验证在视图中显示错误时,我得到了nil:NilClass error的未定义方法“errors”。我遵循这个例子,考虑到它的答案 我在用户模型中的一个验证示例是: 验证狗名的长度,最小值:0,最大值:30,消息:“不能超过30个字符” 查看代码 <% if @user.errors.any? %> <div id="errorExplanation"> <ul> <% @user.errors.full_me

在尝试从Rails中的验证在视图中显示错误时,我得到了nil:NilClass error的
未定义方法“errors”。我遵循这个例子,考虑到它的答案

我在用户模型中的一个验证示例是:
验证狗名的长度,最小值:0,最大值:30,消息:“不能超过30个字符”

查看代码

<% if @user.errors.any? %>
  <div id="errorExplanation">
    <ul>
      <% @user.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
    </ul>
  </div>
<% end %>

用户控制器

class UsersController < ApplicationController
    #before_action :logged_in_user, only: [:index, :edit, :update, :destroy,
    #:following, :followers]
    before_filter :requireLogin
    #before_action :requireDog

    def requireLogin
        if session[:user_id] == nil
            redirect_to "/"
        end
    end

    def requireDog
        @user = User.find(session[:user_id])
        if(@user.dog_name == "Empty")
            redirect_to "users/new/"
        end
    end

    def index
        @users = User.all
    end

    def show
        @user = User.find(params[:id])
        @current_user ||= User.find(session[:user_id]) if session[:user_id]
    end

    def new
        @user = User.new
        @current_user ||= User.find(session[:user_id]) if session[:user_id]
    end

    def update
        @user = User.find(params[:id])
        if @user.update_attributes(profile_params)
            redirect_to action: "show"
            # Handle a successful update.
            else
            render 'edit'
        end
    end

    def following
        @title = "Following"
        @user  = User.find(params[:id])
        @users = @user.following.paginate(page: params[:page])
        render 'show_follow'
    end

    def followers
        @title = "Followers"
        @user  = User.find(params[:id])
        @users = @user.followers.paginate(page: params[:page])
        render 'show_follow'
    end

    def going
        @title = "Going"
        @user  = User.find(params[:id])
        @users = @user.going.paginate(page: params[:page])
        render 'show_gather'
    end

    def create
        @user = User.new(profile_params)
        if @user.save
            redirect_to '/users'
            else
            render 'new'
        end
    end

    private
    def profile_params
        params.require(:user).permit(:dog_name, :photo, :dog_breed, :dog_gender, :dog_age)
    end

end
class UsersController

在其他示例中,用户模型/控制器不需要进一步修改。用户确实存在。我是否在模型或控制器中遗漏了什么?

首先,您最好切换到新的:


要回答您的问题,导致此错误的原因是您试图对不存在的变量调用方法:

for nil:NilClass
Ruby有一种有趣的方式来为未声明的变量发布异常——它不是表面上说变量不存在,而是在
NilClass
类下调用它

作为一名开发人员,您需要阅读
未声明方法的消息
,并推测这是未设置的变量

因此,解决问题的方法是找到变量未设置的原因:

#app/controllers/users_controller.rb
class UsersController < ApplicationController
   def new
      @user = User.new
   end

   def create
      @user = User.new profile_params
      redirect_to users_path if @user.save
   end
end
#app/controllers/users_controller.rb
类UsersController
上面的内容应该可以让您保存用户,否则它将重新呈现
新操作(并显示错误)


我认为您遇到的问题是,您正在显式加载验证问题的
new
操作,这将阻止它附加所需的数据。

首先,您最好切换到新的:


要回答您的问题,导致此错误的原因是您试图对不存在的变量调用方法:

for nil:NilClass
Ruby有一种有趣的方式来为未声明的变量发布异常——它不是表面上说变量不存在,而是在
NilClass
类下调用它

作为一名开发人员,您需要阅读
未声明方法的消息
,并推测这是未设置的变量

因此,解决问题的方法是找到变量未设置的原因:

#app/controllers/users_controller.rb
class UsersController < ApplicationController
   def new
      @user = User.new
   end

   def create
      @user = User.new profile_params
      redirect_to users_path if @user.save
   end
end
#app/controllers/users_controller.rb
类UsersController
上面的内容应该可以让您保存用户,否则它将重新呈现
新操作(并显示错误)


我认为您存在的问题是,您正在显式加载有关验证问题的
new
操作,这将阻止它附加所需的数据。

您能否使用保存
@user
的控制器方法更新您的问题?如果您得到@user nil,请添加控制器代码here@Pavan,完成,抱歉。为什么要同时设置
@user
@current_user
@user
是页面所属的用户,而
@current_user
是当前登录的用户。你能用保存
@user
的控制器方法更新你的问题吗?你的情况是@user nil,请添加控制器代码here@Pavan,完成,抱歉。为什么同时设置
@user
@current\u user
@user
是页面所属的用户,
@current\u user
是当前登录的用户。