Ruby on rails 未定义的方法`错误';for nil:NilClass用于显示Rails验证错误
在尝试从Rails中的验证在视图中显示错误时,我得到了nil:NilClass error的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
未定义方法“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
是当前登录的用户。