【发布时间】:2016-03-13 01:25:10
【问题描述】:
当我尝试在 Rails 中的验证视图中显示错误时,我收到了 undefined method 'errors' for nil:NilClass error。我遵循了这个例子Rails validation error messages displays the error messages and array,并考虑了它的答案。
我在用户模型中的验证示例是:validates_length_of :dog_name, minimum: 0, maximum: 30, message: 'cannot have more than 30 characters'
查看代码
<% 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
在其他示例中,用户模型/控制器不需要进一步修改。用户确实存在。我是否缺少模型或控制器中的某些内容?
【问题讨论】:
-
你能用持有
@user的控制器方法更新你的问题吗? -
在您的情况下,@user nil,请在此处添加您的控制器代码
-
@Pavan,完成,对不起。
-
为什么要同时设置
@user和@current_user? -
@user是页面所属的用户,@current_user是当前登录的用户。