ruby-on-rails - 为什么删除代码行会在 simple_form 中产生“nil:NilClass 的未定义方法‘错误’”
问题描述
我正在尝试为 Rails 应用程序扮演我自己的身份验证系统。尝试加载我的登录页面时,我不断收到“nil:NilClass 的未定义方法‘错误’”错误。如果我取出以下代码,它可以正常工作,但我很好奇为什么会这样?应该保留代码而不是删除它吗?
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
这是我拥有的其他一切:
控制器/会话/new.html.erb
<%= simple_form_for(:session, url: login_path) do |f| %>
<%= f.error_notification %>
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
<div class="">
<%= f.input :email %>
<%= f.input :password, label: "Password" %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
控制器/users_controller.rb
before_action :set_user, only: %i[ show edit update destroy ]
# GET /users or /users.json
def index
@users = User.all
end
# GET /users/1 or /users/1.json
def show
end
# GET /users/new
def new
@user = User.new
end
# GET /users/1/edit
def edit
end
# POST /users or /users.json
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
else
redirect_to root_path
end
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: "User was successfully created." }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Only allow a list of trusted parameters through.
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password)
end
end
路线.rb
Rails.application.routes.draw do
resources :users
get 'login' => 'sessions#new'
post 'login' => 'sessions#create'
delete 'logout' => 'sessions#destroy'
root 'main#index'
end
解决方案
您的会话对象没有在任何地方实例化,您正在传递一个字符串。
<%= simple_form_for(:session, ...) %>
对于f.object.errors
像 ActiveRecord / ActiveModel 实例这样的工作应该已经通过。
推荐阅读
- ruby-on-rails - Rails 服务器的 LoadError 问题
- spring-mvc - 在freeswitch中获取带有url的参数
- c# - 在 MVC5 中使用表单身份验证时,按钮单击以不同的操作方法触发
- netlogo - Netlogo - 行为空间
- rust - 如何为具有生命周期'a的结构实现具有'静态生命周期的特征?
- url-rewriting - 在 IIS 7.x 上启用没有应用程序请求路由 (ARR) 的反向代理
- javascript - html5中的透明视频
- android - 从签名的 apk 在某些设备上获取“未安装应用程序”
- c# - 通过 C# 客户端使用 Nodejs Web 服务
- php - 正则表达式特例 PHP