我看到错误:
“ nil:NilClass的未定义方法“错误””
使用表单创建新用户时尝试显示错误。我是RoR的初学者,所以我不知道错误可能从何而来。这是我的代码:
users_controller.rb
class UsersController < ApplicationController
before_action :set_current_user
def create
@user = User.create firstName: params[:firstName], lastName: params[:lastName], email: params[:email], password: params[:password]
if @user
@current_user = User.where(email: params[:email], password: params[:password]).first
session[:user_id] = @current_user.id
flash[:info] = "Vous etes maintenant connecte"
redirect_to "/users/home"
else
render 'signup'
end
end
private
def set_current_user
if session[:user_id]
@current_user = User.find(session[:user_id])
end
end
end
user.rb
class User < ApplicationRecord
validates :firstName, presence: {
message: "Vous avez oublie quelque chose."
}
validates :lastName, presence: {
message: "Vous avez oublie quelque chose."
}
validates :email, presence: {
message: "Vous avez oublie quelque chose."
}
validates :password, presence: {
message: "Vous avez oublie quelque chose."
}
validates :email, uniqueness: {
message: "Cet adresse email est deja prise."
}
end
routes.rb
Rails.application.routes.draw do
get 'users/home' => 'users#home'
get 'users/login' => 'users#login'
get 'users/signup'
post 'users/login' => 'users#check'
post 'users/signup' => 'users#create'
delete 'users/login' => 'users#logout'
end
signup.html.erb
<%= form_tag "/users/signup", method: "post" do %>
<input type="text" name="firstName" placeholder="First Name" />
<p><%= @user.errors[:firstName].first %></p>
<!-- More fields here -->
<input type="submit" value="Confirmer" />
<% end %>
我之前看到此错误出现在StackOverflow上,但是没有一个答案适用于我的问题:/在此先感谢您阅读本文并抽出宝贵的时间来帮助我!
答案 0 :(得分:4)
错误undefined method errors for nil:NilClass
表示您正在尝试调用n为零的errors
。在这种情况下,@user
为零。您需要在视图中使@user
可用...
在您的路线中添加一个控制器动作来进行注册(如果控制器/动作具有相同的名称,这实际上不是必需的,但是对于其他人来说,这样做可能很有用...
get 'users/signup', to: 'users#signup'
在控制器中添加实例化用户的新方法
def signup
@user = User.new
end
这应该摆脱您收到的错误...但是您的实现还有其他问题(即,您还应该遵循vol7ron的建议并使用强大的参数)
答案 1 :(得分:0)
我不确定这是确切的原因,但您可能需要将参数列入白名单:
position: fixed