gpt4 book ai didi

ruby-on-rails - 在 rails 中测试 - 表单中的第一个参数不能包含 nil 或为空

转载 作者:行者123 更新时间:2023-11-28 20:55:12 24 4
gpt4 key购买 nike

我正在尝试测试我的 Controller 。当我运行测试时,在“should edit user”中,出现此错误。

1) 错误:用户 Controller 测试#test_should_edit_user:ActionView::Template::Error:表单中的第一个参数不能包含 nil 或为空

我想知道如何解决这个错误

user_controller_test

    test "should edit user" do
get :edit, id: @user
assert_response :sucess
end

用户 Controller

class UsersController < ApplicationController
def index
@users = User.all
end

def create
@user = User.new(user_params)
if @user.password == @user.password_confirmation
if @user.save
upload params[:user][:document]
redirect_to root_path
else
render "new"
end
else
render "new"
end
end

def new
@user = User.new
end

def edit
@user = User.find_by_id(session[:remember_token])
end

def edit_password
@user = User.find_by_id(session[:remember_token])
end

def update
@user = User.find_by_id(session[:remember_token])

if @user
@user.update_attribute(:username, params[:user][:username])
@user.update_attribute(:email, params[:user][:email])
redirect_to root_path
else
render "edit"
end
end

def updatePassword
@userSession = User.find_by_id(session[:remember_token])
@user = User.authenticate(@userSession.username, params[:user][:password])

if @user
if params[:user][:password_confirmation] == params[:user][:new_password]
if @user.update_attribute(:password, params[:user][:new_password])
redirect_to root_path
else
redirect_to edit_password_path
end
else
redirect_to edit_password_path
end
else
redirect_to edit_password_path
end
end

def desactivate
@user = User.find_by_id(session[:remember_token])

if @user
@user.update_attribute(:account_status, false)
redirect_to log_out_path
else
redirect_to root_path
end
end

def destroy
@user = User.find(params[:id])
@user.destroy
redirect_to(action: "index")
end

edit.html.erb

<%= link_to "Desativar conta", desactivate_account_path %>
<%= link_to "Alterar Senha", edit_password_path, class: 'button' %>

<%= form_for @user do |f| %>
<% if @user.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>

<ul>
<% @user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>

<div class="field">
<%= f.label :username %><br>
<%= f.text_field :username %>
</div>
<div class="field">
<%= f.label :email %><br>
<%= f.text_field :email %>
</div>
<div class="actions">
<%= f.submit 'Salvar alteração' %>
</div>


<% end %>

最佳答案

有两件事:

首先,为了让您的代码完全按原样工作,请尝试以下操作:

test "should edit user" do
session[:remember_token] = @user.id
get :edit
assert_response :success
end

注意 success 的拼写,两个“c”

那是因为在您运行测试时没有 session

这带来了第二件事:您在哪里初始化 session 哈希?您应该在其中一个 Controller 中的某处有类似 session = params[:user] 的内容。

关于ruby-on-rails - 在 rails 中测试 - 表单中的第一个参数不能包含 nil 或为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26259046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com